diff --git a/applications/Unity.AutoUI/cypress/e2e/ApplicationsActionBar.cy.ts b/applications/Unity.AutoUI/cypress/e2e/ApplicationsActionBar.cy.ts
index 8081e917c..7bbdde704 100644
--- a/applications/Unity.AutoUI/cypress/e2e/ApplicationsActionBar.cy.ts
+++ b/applications/Unity.AutoUI/cypress/e2e/ApplicationsActionBar.cy.ts
@@ -1,7 +1,7 @@
///
import { loginIfNeeded } from "../support/auth";
-import { ApplicationsListPage } from "../pages/ApplicationDetailsPage";
+import { ApplicationsListPage } from "../pages/ApplicationsListPage";
describe("Unity Login and check data from CHEFS", () => {
const page = new ApplicationsListPage();
@@ -171,13 +171,12 @@ describe("Unity Login and check data from CHEFS", () => {
page.switchToGrantProgram("Default Grants Program");
});
- it("Tests the existence and functionality of the Submitted Date From and Submitted Date To filters", () => {
- // Set date filters using page object methods
+ it("Tests the existence and functionality of the Quick Date Range filter", () => {
+ // Select "All time" from quick date range dropdown and verify table refreshes
page
- .setSubmittedFromDate("2022-01-01")
+ .selectQuickDateRange("alltime")
.waitForTableRefresh()
- .setSubmittedToDate(page.getTodayIsoLocal())
- .waitForTableRefresh();
+ .verifyQuickDateRangeValue("alltime");
});
// With no rows selected verify the visibility of Filter, Export, Save View, and Columns.
@@ -196,7 +195,7 @@ describe("Unity Login and check data from CHEFS", () => {
.verifyTableHasData()
.selectMultipleRows([0, 1])
.verifyActionBarExists()
- .clickPaymentButton()
+ .clickPaymentButtonWithWait()
.waitForPaymentModalVisible()
.closePaymentModal()
.verifyPaymentModalClosed();
diff --git a/applications/Unity.AutoUI/cypress/e2e/basicEmail.cy.ts b/applications/Unity.AutoUI/cypress/e2e/basicEmail.cy.ts
index 152081bae..0c08e11ce 100644
--- a/applications/Unity.AutoUI/cypress/e2e/basicEmail.cy.ts
+++ b/applications/Unity.AutoUI/cypress/e2e/basicEmail.cy.ts
@@ -269,6 +269,24 @@ describe("Send an email", () => {
});
it("Open Emails tab", () => {
+ // Dismiss any swal2 modal that may be covering the tab
+ cy.get("body").then(($body) => {
+ if ($body.find(".swal2-container").length > 0) {
+ cy.get(".swal2-container").then(($swal) => {
+ if ($swal.find(".swal2-close").length > 0) {
+ cy.get(".swal2-close").click({ force: true });
+ } else if ($swal.find(".swal2-confirm").length > 0) {
+ cy.get(".swal2-confirm").click({ force: true });
+ } else {
+ cy.get("body").type("{esc}", { force: true });
+ }
+ });
+ cy.get(".swal2-container", { timeout: STANDARD_TIMEOUT }).should(
+ "not.exist",
+ );
+ }
+ });
+
cy.get("#emails-tab", { timeout: STANDARD_TIMEOUT })
.should("exist")
.should("be.visible")
diff --git a/applications/Unity.AutoUI/cypress/e2e/chefsdata.cy.ts b/applications/Unity.AutoUI/cypress/e2e/chefsdata.cy.ts
index b9ec8948c..05fe3e5a5 100644
--- a/applications/Unity.AutoUI/cypress/e2e/chefsdata.cy.ts
+++ b/applications/Unity.AutoUI/cypress/e2e/chefsdata.cy.ts
@@ -59,13 +59,12 @@ describe('Unity Login and check data from CHEFS', () => {
// Ensure the search field exists
cy.get('#search', { timeout: STANDARD_TIMEOUT }).should('exist')
- // Conditionally widen Submitted Date range if the control exists
+ // Select "All time" from quick date range to widen the search
cy.get('body', { timeout: STANDARD_TIMEOUT }).then(($body) => {
- if ($body.find('input#submittedFromDate').length > 0) {
- cy.get('input#submittedFromDate', { timeout: STANDARD_TIMEOUT })
- .should('exist')
- .clear()
- .type('2022-01-01')
+ if ($body.find('select#quickDateRange').length > 0) {
+ cy.get('select#quickDateRange', { timeout: STANDARD_TIMEOUT })
+ .should('be.visible')
+ .select('alltime')
}
})
diff --git a/applications/Unity.AutoUI/cypress/pages/ApplicationDetailsPage.ts b/applications/Unity.AutoUI/cypress/pages/ApplicationDetailsPage.ts
index 34eb15827..6194b02f1 100644
--- a/applications/Unity.AutoUI/cypress/pages/ApplicationDetailsPage.ts
+++ b/applications/Unity.AutoUI/cypress/pages/ApplicationDetailsPage.ts
@@ -2,506 +2,6 @@
import { BasePage } from "./BasePage";
-/**
- * ApplicationsListPage - Page Object for the Grant Applications List page
- * Handles action bar, filters, table operations, columns menu, and modals
- */
-export class ApplicationsListPage extends BasePage {
- private readonly STANDARD_TIMEOUT = 20000;
- private readonly BUTTON_TIMEOUT = 60000;
-
- // Date filter selectors
- private readonly dateFilters = {
- submittedFromDate: "input#submittedFromDate",
- submittedToDate: "input#submittedToDate",
- spinner: 'div.spinner-grow[role="status"]',
- };
-
- // Action bar selectors
- private readonly actionBar = {
- customButtons: "#app_custom_buttons",
- dynamicButtonContainer: "#dynamicButtonContainerId",
- paymentButton: "#applicationPaymentRequest",
- exportButton: "#dynamicButtonContainerId .dt-buttons button span",
- saveViewButton: "button.grp-savedStates",
- columnsButton: "span",
- };
-
- // Table selectors
- private readonly table = {
- scrollBody: ".dt-scroll-body",
- tableRows: ".dt-scroll-body tbody tr",
- scrollHead: ".dt-scroll-head",
- columnTitles: ".dt-scroll-head span.dt-column-title",
- };
-
- // Columns menu selectors
- private readonly columnsMenu = {
- dropdownItem: "a.dropdown-item",
- buttonBackground: "div.dt-button-background",
- };
-
- // Payment modal selectors
- private readonly paymentModal = {
- modal: "#payment-modal",
- backdrop: ".modal-backdrop",
- cancelButton: "#payment-modal .modal-footer button",
- };
-
- // Grant program selectors
- private readonly grantProgram = {
- userInitials: ".unity-user-initials",
- userDropdown: "#user-dropdown a.dropdown-item",
- searchInput: "#search-grant-programs",
- programsTable: "#UserGrantProgramsTable",
- programsTableRow: "#UserGrantProgramsTable tbody tr",
- };
-
- // Save view selectors
- private readonly saveView = {
- button: "button.grp-savedStates",
- resetOption: "a.dropdown-item",
- };
-
- constructor() {
- super();
- }
-
- // ============ Date Filter Methods ============
-
- /**
- * Set the Submitted From Date filter
- */
- setSubmittedFromDate(date: string): this {
- cy.get(this.dateFilters.submittedFromDate, { timeout: this.STANDARD_TIMEOUT })
- .click({ force: true })
- .clear({ force: true })
- .type(date, { force: true })
- .trigger("change", { force: true })
- .blur({ force: true })
- .should("have.value", date);
- return this;
- }
-
- /**
- * Set the Submitted To Date filter
- */
- setSubmittedToDate(date: string): this {
- cy.get(this.dateFilters.submittedToDate, { timeout: this.STANDARD_TIMEOUT })
- .click({ force: true })
- .clear({ force: true })
- .type(date, { force: true })
- .trigger("change", { force: true })
- .blur({ force: true })
- .should("have.value", date);
- return this;
- }
-
- /**
- * Wait for table refresh (spinner to be hidden)
- */
- waitForTableRefresh(): this {
- cy.get(this.dateFilters.spinner, { timeout: this.STANDARD_TIMEOUT }).then(
- ($s: JQuery) => {
- cy.wrap($s)
- .should("have.attr", "style")
- .and("contain", "display: none");
- }
- );
- return this;
- }
-
- /**
- * Get today's date in ISO local format (YYYY-MM-DD)
- */
- getTodayIsoLocal(): string {
- const d = new Date();
- const pad2 = (n: number) => String(n).padStart(2, "0");
- return `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;
- }
-
- // ============ Table Methods ============
-
- /**
- * Verify table has rows
- */
- verifyTableHasData(): this {
- cy.get(this.table.tableRows, { timeout: this.STANDARD_TIMEOUT }).should(
- "have.length.greaterThan",
- 1
- );
- return this;
- }
-
- /**
- * Select a row by index (clicks on a non-link cell)
- */
- selectRowByIndex(rowIndex: number, withCtrl = false): this {
- cy.get(this.table.tableRows, { timeout: this.STANDARD_TIMEOUT })
- .eq(rowIndex)
- .find("td")
- .not(":has(a)")
- .first()
- .click({ force: true, ctrlKey: withCtrl });
- return this;
- }
-
- /**
- * Select multiple rows by indices
- */
- selectMultipleRows(indices: number[]): this {
- indices.forEach((index, i) => {
- this.selectRowByIndex(index, i > 0);
- });
- return this;
- }
-
- /**
- * Scroll table horizontally to a specific position
- */
- scrollTableHorizontally(x: number): this {
- cy.get(this.table.scrollBody, { timeout: this.STANDARD_TIMEOUT })
- .should("exist")
- .scrollTo(x, 0, { duration: 0, ensureScrollable: false });
- return this;
- }
-
- /**
- * Get visible header titles from the table
- */
- getVisibleHeaderTitles(): Cypress.Chainable {
- return cy
- .get(this.table.columnTitles, { timeout: this.STANDARD_TIMEOUT })
- .then(($els: JQuery) => {
- const titles: string[] = Cypress.$($els)
- .toArray()
- .map((el: HTMLElement) => (el.textContent || "").replace(/\s+/g, " ").trim())
- .filter((t: string) => t.length > 0);
- return titles;
- });
- }
-
- /**
- * Assert that visible headers include expected columns
- */
- assertVisibleHeadersInclude(expected: string[]): this {
- this.getVisibleHeaderTitles().then((titles: string[]) => {
- expected.forEach((e: string) => {
- expect(titles, `visible headers should include "${e}"`).to.include(e);
- });
- });
- return this;
- }
-
- // ============ Action Bar Methods ============
-
- /**
- * Scroll to and verify action bar exists
- */
- verifyActionBarExists(): this {
- cy.get(this.actionBar.customButtons, { timeout: this.STANDARD_TIMEOUT })
- .should("exist")
- .scrollIntoView();
- return this;
- }
-
- /**
- * Click the Payment button
- */
- clickPaymentButton(): this {
- cy.get(this.actionBar.paymentButton, { timeout: this.BUTTON_TIMEOUT })
- .should("be.visible")
- .and("not.be.disabled")
- .click({ force: true });
- return this;
- }
-
- /**
- * Verify Export button is visible
- */
- verifyExportButtonVisible(): this {
- cy.contains(this.actionBar.exportButton, "Export", {
- timeout: this.STANDARD_TIMEOUT,
- }).should("be.visible");
- return this;
- }
-
- /**
- * Verify Save View button is visible
- */
- verifySaveViewButtonVisible(): this {
- cy.contains(
- "#dynamicButtonContainerId button.grp-savedStates",
- "Save View",
- { timeout: this.STANDARD_TIMEOUT }
- ).should("be.visible");
- return this;
- }
-
- /**
- * Verify Columns button is visible
- */
- verifyColumnsButtonVisible(): this {
- cy.contains(
- "#dynamicButtonContainerId .dt-buttons button span",
- "Columns",
- { timeout: this.STANDARD_TIMEOUT }
- ).should("be.visible");
- return this;
- }
-
- /**
- * Verify dynamic button container exists
- */
- verifyDynamicButtonContainerExists(): this {
- cy.get(this.actionBar.dynamicButtonContainer, {
- timeout: this.STANDARD_TIMEOUT,
- })
- .should("exist")
- .scrollIntoView();
- return this;
- }
-
- // ============ Payment Modal Methods ============
-
- /**
- * Wait for payment modal to be visible
- */
- waitForPaymentModalVisible(): this {
- cy.get(this.paymentModal.modal, { timeout: this.STANDARD_TIMEOUT })
- .should("be.visible")
- .and("have.class", "show");
- return this;
- }
-
- /**
- * Close payment modal using multiple strategies
- */
- closePaymentModal(): this {
- // Attempt ESC key
- cy.get("body").type("{esc}", { force: true });
-
- // Click backdrop if present
- cy.get(this.paymentModal.backdrop, { timeout: this.STANDARD_TIMEOUT }).then(
- ($bd: JQuery) => {
- if ($bd.length) {
- cy.wrap($bd).click("topLeft", { force: true });
- }
- }
- );
-
- // Try Cancel button if available
- cy.contains(this.paymentModal.cancelButton, "Cancel", {
- timeout: this.STANDARD_TIMEOUT,
- }).then(($btn: JQuery) => {
- if ($btn && $btn.length > 0) {
- cy.wrap($btn).scrollIntoView().click({ force: true });
- } else {
- cy.log("Cancel button not present, proceeding to hard-close fallback");
- }
- });
-
- // Hard close fallback using jQuery
- cy.window().then((win: Cypress.AUTWindow) => {
- try {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- const windowWithModal = win as any;
- if (typeof windowWithModal.closePaymentModal === "function") {
- windowWithModal.closePaymentModal();
- }
- } catch {
- /* ignore */
- }
-
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- const $ = (win as any).jQuery || (win as any).$;
- if ($) {
- try {
- $("#payment-modal")
- .removeClass("show")
- .attr("aria-hidden", "true")
- .css("display", "none");
- $(".modal-backdrop").remove();
- $("body").removeClass("modal-open").css("overflow", "");
- } catch {
- /* ignore */
- }
- }
- });
- return this;
- }
-
- /**
- * Verify payment modal is closed
- */
- verifyPaymentModalClosed(): this {
- cy.get(this.paymentModal.modal, { timeout: this.STANDARD_TIMEOUT }).should(
- ($m: JQuery) => {
- const isHidden = !$m.is(":visible") || !$m.hasClass("show");
- expect(isHidden, "payment-modal hidden or not shown").to.eq(true);
- }
- );
- cy.get(this.paymentModal.backdrop, { timeout: this.STANDARD_TIMEOUT }).should(
- "not.exist"
- );
- return this;
- }
-
- // ============ Columns Menu Methods ============
-
- /**
- * Close any open dropdowns or modals
- */
- closeOpenDropdowns(): this {
- cy.get("body").then(($body: JQuery) => {
- if ($body.find(this.columnsMenu.buttonBackground).length > 0) {
- cy.get(this.columnsMenu.buttonBackground).click({ force: true });
- }
- });
- return this;
- }
-
- /**
- * Open Save View dropdown and reset to default
- */
- resetToDefaultView(): this {
- cy.get(this.saveView.button, { timeout: this.STANDARD_TIMEOUT })
- .should("be.visible")
- .and("contain.text", "Save View")
- .click();
-
- cy.contains(this.saveView.resetOption, "Reset to Default View", {
- timeout: this.STANDARD_TIMEOUT,
- })
- .should("exist")
- .click({ force: true });
-
- // Wait for table to rebuild
- cy.get(this.table.columnTitles, { timeout: this.STANDARD_TIMEOUT }).should(
- "have.length.gt",
- 5
- );
- return this;
- }
-
- /**
- * Open the Columns menu
- */
- openColumnsMenu(): this {
- cy.contains("span", "Columns", { timeout: this.STANDARD_TIMEOUT })
- .should("be.visible")
- .click();
-
- // Wait for dropdown to be fully populated
- cy.get(this.columnsMenu.dropdownItem, { timeout: this.STANDARD_TIMEOUT }).should(
- "have.length.gt",
- 50
- );
- return this;
- }
-
- /**
- * Click a column item in the Columns menu
- */
- clickColumnsItem(label: string): this {
- cy.contains(this.columnsMenu.dropdownItem, label, {
- timeout: this.STANDARD_TIMEOUT,
- })
- .should("exist")
- .scrollIntoView()
- .click({ force: true });
- return this;
- }
-
- /**
- * Toggle multiple columns (click each one)
- */
- toggleColumns(columns: string[]): this {
- columns.forEach((column) => {
- this.clickColumnsItem(column);
- });
- return this;
- }
-
- /**
- * Close the Columns menu
- */
- closeColumnsMenu(): this {
- cy.get(this.columnsMenu.buttonBackground, { timeout: this.STANDARD_TIMEOUT })
- .should("exist")
- .click({ force: true });
-
- cy.get(this.columnsMenu.buttonBackground, {
- timeout: this.STANDARD_TIMEOUT,
- }).should("not.exist");
- return this;
- }
-
- // ============ Grant Program Methods ============
-
- /**
- * Switch to a specific grant program if available
- */
- switchToGrantProgram(programName: string): this {
- cy.get("body").then(($body: JQuery) => {
- const hasUserInitials =
- $body.find(this.grantProgram.userInitials).length > 0;
-
- if (!hasUserInitials) {
- cy.log("Skipping tenant switch: no user initials menu found");
- return;
- }
-
- cy.get(this.grantProgram.userInitials).click();
-
- cy.get("body").then(($body2: JQuery) => {
- const switchLink = $body2
- .find(this.grantProgram.userDropdown)
- .filter((_: number, el: HTMLElement) => {
- return (el.textContent || "").trim() === "Switch Grant Programs";
- });
-
- if (switchLink.length === 0) {
- cy.log(
- 'Skipping tenant switch: "Switch Grant Programs" not present for this user/session'
- );
- cy.get("body").click(0, 0);
- return;
- }
-
- cy.wrap(switchLink.first()).click();
-
- cy.url({ timeout: this.STANDARD_TIMEOUT }).should(
- "include",
- "/GrantPrograms"
- );
-
- cy.get(this.grantProgram.searchInput, { timeout: this.STANDARD_TIMEOUT })
- .should("be.visible")
- .clear()
- .type(programName);
-
- cy.contains(this.grantProgram.programsTableRow, programName, {
- timeout: this.STANDARD_TIMEOUT,
- })
- .should("exist")
- .within(() => {
- cy.contains("button", "Select").should("be.enabled").click();
- });
-
- cy.location("pathname", { timeout: this.STANDARD_TIMEOUT }).should(
- (p: string) => {
- expect(
- p.indexOf("/GrantApplications") >= 0 || p.indexOf("/auth/") >= 0
- ).to.eq(true);
- }
- );
- });
- });
- return this;
- }
-}
-
/**
* ApplicationDetailsPage - Page Object for the Application Details page
* Handles tabs, status actions, and field verification
diff --git a/applications/Unity.AutoUI/cypress/pages/ApplicationsListPage.ts b/applications/Unity.AutoUI/cypress/pages/ApplicationsListPage.ts
new file mode 100644
index 000000000..aae8eb72b
--- /dev/null
+++ b/applications/Unity.AutoUI/cypress/pages/ApplicationsListPage.ts
@@ -0,0 +1,574 @@
+///
+
+import { ApplicationsPage } from "./ListPages";
+
+/**
+ * ApplicationsListPage - Extended Page Object for the Grant Applications List page
+ * Extends ApplicationsPage with additional functionality for:
+ * - Date filters
+ * - Columns menu operations
+ * - Payment modal handling
+ * - Table horizontal scrolling and column visibility
+ */
+export class ApplicationsListPage extends ApplicationsPage {
+ private readonly STANDARD_TIMEOUT = 20000;
+ private readonly BUTTON_TIMEOUT = 60000;
+
+ // Date filter selectors
+ private readonly dateFilters = {
+ quickDateRange: "select#quickDateRange",
+ submittedFromDate: "input#submittedFromDate",
+ submittedToDate: "input#submittedToDate",
+ spinner: 'div.spinner-grow[role="status"]',
+ };
+
+ // Quick date range option values
+ private readonly quickDateRangeOptions = {
+ today: "today",
+ last7Days: "last7days",
+ last30Days: "last30days",
+ last3Months: "last3months",
+ last6Months: "last6months",
+ allTime: "alltime",
+ custom: "custom",
+ };
+
+ // Extended action bar selectors (beyond ApplicationsPage)
+ private readonly extendedActionBar = {
+ customButtons: "#app_custom_buttons",
+ dynamicButtonContainer: "#dynamicButtonContainerId",
+ exportButton: "#dynamicButtonContainerId .dt-buttons button span",
+ saveViewButton: "button.grp-savedStates",
+ };
+
+ // Table scrolling selectors
+ private readonly scrollTable = {
+ scrollBody: ".dt-scroll-body",
+ tableRows: ".dt-scroll-body tbody tr",
+ scrollHead: ".dt-scroll-head",
+ columnTitles: ".dt-scroll-head span.dt-column-title",
+ };
+
+ // Columns menu selectors
+ private readonly columnsMenu = {
+ dropdownItem: "a.dropdown-item",
+ buttonBackground: "div.dt-button-background",
+ };
+
+ // Payment modal selectors
+ private readonly paymentModal = {
+ modal: "#payment-modal",
+ backdrop: ".modal-backdrop",
+ cancelButton: "#payment-modal .modal-footer button",
+ };
+
+ // Grant program selectors
+ private readonly grantProgram = {
+ userInitials: ".unity-user-initials",
+ userDropdown: "#user-dropdown a.dropdown-item",
+ searchInput: "#search-grant-programs",
+ programsTableRow: "#UserGrantProgramsTable tbody tr",
+ };
+
+ // Save view selectors
+ private readonly saveView = {
+ button: "button.grp-savedStates",
+ resetOption: "a.dropdown-item",
+ };
+
+ constructor() {
+ super();
+ }
+
+ // ============ Date Filter Methods ============
+
+ /**
+ * Select a quick date range from the dropdown
+ * @param range - One of: "today", "last7days", "last30days", "last3months", "last6months", "alltime", "custom"
+ */
+ selectQuickDateRange(
+ range:
+ | "today"
+ | "last7days"
+ | "last30days"
+ | "last3months"
+ | "last6months"
+ | "alltime"
+ | "custom"
+ ): this {
+ cy.get(this.dateFilters.quickDateRange, { timeout: this.STANDARD_TIMEOUT })
+ .should("be.visible")
+ .select(range);
+ return this;
+ }
+
+ /**
+ * Select "Last 6 months" from quick date range (default)
+ */
+ selectLast6Months(): this {
+ return this.selectQuickDateRange("last6months");
+ }
+
+ /**
+ * Select "All time" from quick date range
+ */
+ selectAllTime(): this {
+ return this.selectQuickDateRange("alltime");
+ }
+
+ /**
+ * Verify the quick date range dropdown has expected value
+ */
+ verifyQuickDateRangeValue(
+ expectedValue:
+ | "today"
+ | "last7days"
+ | "last30days"
+ | "last3months"
+ | "last6months"
+ | "alltime"
+ | "custom"
+ ): this {
+ cy.get(this.dateFilters.quickDateRange, { timeout: this.STANDARD_TIMEOUT })
+ .should("have.value", expectedValue);
+ return this;
+ }
+
+ /**
+ * Set the Submitted From Date filter (for custom date range)
+ * @deprecated Use selectQuickDateRange() instead. This method is for custom date ranges only.
+ */
+ setSubmittedFromDate(date: string): this {
+ cy.get(this.dateFilters.submittedFromDate, { timeout: this.STANDARD_TIMEOUT })
+ .click({ force: true })
+ .clear({ force: true })
+ .type(date, { force: true })
+ .trigger("change", { force: true })
+ .blur({ force: true })
+ .should("have.value", date);
+ return this;
+ }
+
+ /**
+ * Set the Submitted To Date filter
+ */
+ setSubmittedToDate(date: string): this {
+ cy.get(this.dateFilters.submittedToDate, { timeout: this.STANDARD_TIMEOUT })
+ .click({ force: true })
+ .clear({ force: true })
+ .type(date, { force: true })
+ .trigger("change", { force: true })
+ .blur({ force: true })
+ .should("have.value", date);
+ return this;
+ }
+
+ /**
+ * Wait for table refresh (spinner to be hidden)
+ */
+ waitForTableRefresh(): this {
+ cy.get(this.dateFilters.spinner, { timeout: this.STANDARD_TIMEOUT }).then(
+ ($s: JQuery) => {
+ cy.wrap($s)
+ .should("have.attr", "style")
+ .and("contain", "display: none");
+ }
+ );
+ return this;
+ }
+
+ /**
+ * Get today's date in ISO local format (YYYY-MM-DD)
+ */
+ getTodayIsoLocal(): string {
+ const d = new Date();
+ const pad2 = (n: number) => String(n).padStart(2, "0");
+ return `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;
+ }
+
+ // ============ Extended Table Methods ============
+
+ /**
+ * Verify table has rows (using scroll body selector)
+ */
+ verifyTableHasData(): this {
+ cy.get(this.scrollTable.tableRows, { timeout: this.STANDARD_TIMEOUT }).should(
+ "have.length.greaterThan",
+ 1
+ );
+ return this;
+ }
+
+ /**
+ * Select a row by index (clicks on a non-link cell)
+ */
+ selectRowByIndex(rowIndex: number, withCtrl = false): this {
+ cy.get(this.scrollTable.tableRows, { timeout: this.STANDARD_TIMEOUT })
+ .eq(rowIndex)
+ .find("td")
+ .not(":has(a)")
+ .first()
+ .click({ force: true, ctrlKey: withCtrl });
+ return this;
+ }
+
+ /**
+ * Select multiple rows by indices
+ */
+ selectMultipleRows(indices: number[]): this {
+ indices.forEach((index, i) => {
+ this.selectRowByIndex(index, i > 0);
+ });
+ return this;
+ }
+
+ /**
+ * Scroll table horizontally to a specific position
+ */
+ scrollTableHorizontally(x: number): this {
+ cy.get(this.scrollTable.scrollBody, { timeout: this.STANDARD_TIMEOUT })
+ .should("exist")
+ .scrollTo(x, 0, { duration: 0, ensureScrollable: false });
+ return this;
+ }
+
+ /**
+ * Get visible header titles from the table
+ */
+ getVisibleHeaderTitles(): Cypress.Chainable {
+ return cy
+ .get(this.scrollTable.columnTitles, { timeout: this.STANDARD_TIMEOUT })
+ .then(($els: JQuery) => {
+ const titles: string[] = Cypress.$($els)
+ .toArray()
+ .map((el: HTMLElement) => (el.textContent || "").replace(/\s+/g, " ").trim())
+ .filter((t: string) => t.length > 0);
+ return titles;
+ });
+ }
+
+ /**
+ * Assert that visible headers include expected columns (case-insensitive)
+ */
+ assertVisibleHeadersInclude(expected: string[]): this {
+ this.getVisibleHeaderTitles().then((titles: string[]) => {
+ const titlesLower = titles.map((t: string) => t.toLowerCase());
+ expected.forEach((e: string) => {
+ expect(
+ titlesLower,
+ `visible headers should include "${e}"`
+ ).to.include(e.toLowerCase());
+ });
+ });
+ return this;
+ }
+
+ // ============ Extended Action Bar Methods ============
+
+ /**
+ * Scroll to and verify action bar exists
+ */
+ verifyActionBarExists(): this {
+ cy.get(this.extendedActionBar.customButtons, { timeout: this.STANDARD_TIMEOUT })
+ .should("exist")
+ .scrollIntoView();
+ return this;
+ }
+
+ /**
+ * Click the Payment button (extended with visibility checks)
+ */
+ clickPaymentButtonWithWait(): this {
+ cy.get("#applicationPaymentRequest", { timeout: this.BUTTON_TIMEOUT })
+ .should("be.visible")
+ .and("not.be.disabled")
+ .click({ force: true });
+ return this;
+ }
+
+ /**
+ * Verify Export button is visible
+ */
+ verifyExportButtonVisible(): this {
+ cy.contains(this.extendedActionBar.exportButton, "Export", {
+ timeout: this.STANDARD_TIMEOUT,
+ }).should("be.visible");
+ return this;
+ }
+
+ /**
+ * Verify Save View button is visible
+ */
+ verifySaveViewButtonVisible(): this {
+ cy.contains(
+ "#dynamicButtonContainerId button.grp-savedStates",
+ "Save View",
+ { timeout: this.STANDARD_TIMEOUT }
+ ).should("be.visible");
+ return this;
+ }
+
+ /**
+ * Verify Columns button is visible
+ */
+ verifyColumnsButtonVisible(): this {
+ cy.contains(
+ "#dynamicButtonContainerId .dt-buttons button span",
+ "Columns",
+ { timeout: this.STANDARD_TIMEOUT }
+ ).should("be.visible");
+ return this;
+ }
+
+ /**
+ * Verify dynamic button container exists
+ */
+ verifyDynamicButtonContainerExists(): this {
+ cy.get(this.extendedActionBar.dynamicButtonContainer, {
+ timeout: this.STANDARD_TIMEOUT,
+ })
+ .should("exist")
+ .scrollIntoView();
+ return this;
+ }
+
+ // ============ Payment Modal Methods ============
+
+ /**
+ * Wait for payment modal to be visible
+ */
+ waitForPaymentModalVisible(): this {
+ cy.get(this.paymentModal.modal, { timeout: this.STANDARD_TIMEOUT })
+ .should("be.visible")
+ .and("have.class", "show");
+ return this;
+ }
+
+ /**
+ * Close payment modal using multiple strategies
+ */
+ closePaymentModal(): this {
+ // Attempt ESC key
+ cy.get("body").type("{esc}", { force: true });
+
+ // Click backdrop if present (check existence first to avoid timeout)
+ cy.get("body").then(($body: JQuery) => {
+ if ($body.find(this.paymentModal.backdrop).length > 0) {
+ cy.get(this.paymentModal.backdrop).click("topLeft", { force: true });
+ }
+ });
+
+ // Try Cancel button if available (check existence first to avoid timeout)
+ cy.get("body").then(($body: JQuery) => {
+ const $cancelBtn = $body.find(this.paymentModal.cancelButton).filter(
+ (_: number, el: HTMLElement) => (el.textContent || "").includes("Cancel")
+ );
+ if ($cancelBtn.length > 0) {
+ cy.wrap($cancelBtn.first()).scrollIntoView().click({ force: true });
+ } else {
+ cy.log("Cancel button not present, proceeding to hard-close fallback");
+ }
+ });
+
+ // Hard close fallback using jQuery
+ cy.window().then((win: Cypress.AUTWindow) => {
+ try {
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ const windowWithModal = win as any;
+ if (typeof windowWithModal.closePaymentModal === "function") {
+ windowWithModal.closePaymentModal();
+ }
+ } catch {
+ /* ignore */
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ const $ = (win as any).jQuery || (win as any).$;
+ if ($) {
+ try {
+ $("#payment-modal")
+ .removeClass("show")
+ .attr("aria-hidden", "true")
+ .css("display", "none");
+ $(".modal-backdrop").remove();
+ $("body").removeClass("modal-open").css("overflow", "");
+ } catch {
+ /* ignore */
+ }
+ }
+ });
+ return this;
+ }
+
+ /**
+ * Verify payment modal is closed
+ */
+ verifyPaymentModalClosed(): this {
+ cy.get(this.paymentModal.modal, { timeout: this.STANDARD_TIMEOUT }).should(
+ ($m: JQuery) => {
+ const isHidden = !$m.is(":visible") || !$m.hasClass("show");
+ expect(isHidden, "payment-modal hidden or not shown").to.eq(true);
+ }
+ );
+ cy.get(this.paymentModal.backdrop, { timeout: this.STANDARD_TIMEOUT }).should(
+ "not.exist"
+ );
+ return this;
+ }
+
+ // ============ Columns Menu Methods ============
+
+ /**
+ * Close any open dropdowns or modals
+ */
+ closeOpenDropdowns(): this {
+ cy.get("body").then(($body: JQuery) => {
+ if ($body.find(this.columnsMenu.buttonBackground).length > 0) {
+ cy.get(this.columnsMenu.buttonBackground).click({ force: true });
+ }
+ });
+ return this;
+ }
+
+ /**
+ * Open Save View dropdown and reset to default
+ */
+ resetToDefaultView(): this {
+ cy.get(this.saveView.button, { timeout: this.STANDARD_TIMEOUT })
+ .should("be.visible")
+ .and("contain.text", "Save View")
+ .click();
+
+ cy.contains(this.saveView.resetOption, "Reset to Default View", {
+ timeout: this.STANDARD_TIMEOUT,
+ })
+ .should("exist")
+ .click({ force: true });
+
+ // Wait for table to rebuild
+ cy.get(this.scrollTable.columnTitles, { timeout: this.STANDARD_TIMEOUT }).should(
+ "have.length.gt",
+ 5
+ );
+ return this;
+ }
+
+ /**
+ * Open the Columns menu
+ */
+ openColumnsMenu(): this {
+ cy.contains("span", "Columns", { timeout: this.STANDARD_TIMEOUT })
+ .should("be.visible")
+ .click();
+
+ // Wait for dropdown to be fully populated
+ cy.get(this.columnsMenu.dropdownItem, { timeout: this.STANDARD_TIMEOUT }).should(
+ "have.length.gt",
+ 50
+ );
+ return this;
+ }
+
+ /**
+ * Click a column item in the Columns menu (case-insensitive)
+ */
+ clickColumnsItem(label: string): this {
+ cy.contains(this.columnsMenu.dropdownItem, label, {
+ timeout: this.STANDARD_TIMEOUT,
+ matchCase: false,
+ })
+ .should("exist")
+ .scrollIntoView()
+ .click({ force: true });
+ return this;
+ }
+
+ /**
+ * Toggle multiple columns (click each one)
+ */
+ toggleColumns(columns: string[]): this {
+ columns.forEach((column) => {
+ this.clickColumnsItem(column);
+ });
+ return this;
+ }
+
+ /**
+ * Close the Columns menu
+ */
+ closeColumnsMenu(): this {
+ cy.get(this.columnsMenu.buttonBackground, { timeout: this.STANDARD_TIMEOUT })
+ .should("exist")
+ .click({ force: true });
+
+ cy.get(this.columnsMenu.buttonBackground, {
+ timeout: this.STANDARD_TIMEOUT,
+ }).should("not.exist");
+ return this;
+ }
+
+ // ============ Grant Program Methods ============
+
+ /**
+ * Switch to a specific grant program if available
+ * Note: Consider using NavigationPage.switchToTenantIfAvailable() for consistency
+ */
+ switchToGrantProgram(programName: string): this {
+ cy.get("body").then(($body: JQuery) => {
+ const hasUserInitials =
+ $body.find(this.grantProgram.userInitials).length > 0;
+
+ if (!hasUserInitials) {
+ cy.log("Skipping tenant switch: no user initials menu found");
+ return;
+ }
+
+ cy.get(this.grantProgram.userInitials).click();
+
+ cy.get("body").then(($body2: JQuery) => {
+ const switchLink = $body2
+ .find(this.grantProgram.userDropdown)
+ .filter((_: number, el: HTMLElement) => {
+ return (el.textContent || "").trim() === "Switch Grant Programs";
+ });
+
+ if (switchLink.length === 0) {
+ cy.log(
+ 'Skipping tenant switch: "Switch Grant Programs" not present for this user/session'
+ );
+ cy.get("body").click(0, 0);
+ return;
+ }
+
+ cy.wrap(switchLink.first()).click();
+
+ cy.url({ timeout: this.STANDARD_TIMEOUT }).should(
+ "include",
+ "/GrantPrograms"
+ );
+
+ cy.get(this.grantProgram.searchInput, { timeout: this.STANDARD_TIMEOUT })
+ .should("be.visible")
+ .clear()
+ .type(programName);
+
+ cy.contains(this.grantProgram.programsTableRow, programName, {
+ timeout: this.STANDARD_TIMEOUT,
+ })
+ .should("exist")
+ .within(() => {
+ cy.contains("button", "Select").should("be.enabled").click();
+ });
+
+ cy.location("pathname", { timeout: this.STANDARD_TIMEOUT }).should(
+ (p: string) => {
+ expect(
+ p.indexOf("/GrantApplications") >= 0 || p.indexOf("/auth/") >= 0
+ ).to.eq(true);
+ }
+ );
+ });
+ });
+ return this;
+ }
+}
diff --git a/applications/Unity.AutoUI/cypress/support/auth.ts b/applications/Unity.AutoUI/cypress/support/auth.ts
index 764222b8f..bd83e88c5 100644
--- a/applications/Unity.AutoUI/cypress/support/auth.ts
+++ b/applications/Unity.AutoUI/cypress/support/auth.ts
@@ -176,31 +176,31 @@ function performLogin(options: LoginOptions = {}): void {
*/
export function loginIfNeeded(
options: LoginOptions = {},
-): Cypress.Chainable {
+): void {
const username = options.username || (Cypress.env("test1username") as string);
const baseUrl = options.baseUrl || (Cypress.env("webapp.url") as string);
const sessionId = `unity-${baseUrl}-${username}`;
- return cy
- .session(
- sessionId,
- () => {
- performLogin(options);
- },
- {
- validate() {
- // Lightweight validation: check auth cookies exist without visiting
- return cy.getCookie(".AspNetCore.Cookies").then((cookie) => {
- if (!cookie) {
- throw new Error("Session expired - auth cookie missing");
- }
- });
- },
- cacheAcrossSpecs: true,
+ cy.session(
+ sessionId,
+ () => {
+ performLogin(options);
+ },
+ {
+ validate() {
+ // Lightweight validation: check auth cookies exist without visiting
+ cy.getCookie(".AspNetCore.Cookies").then((cookie) => {
+ if (!cookie) {
+ throw new Error("Session expired - auth cookie missing");
+ }
+ });
},
- )
- .then(() => {
- cy.visit(baseUrl);
- ensureGrantApplicationsPage(options.timeout || 20000);
- });
+ cacheAcrossSpecs: true,
+ },
+ );
+
+ cy.then(() => {
+ cy.visit(baseUrl);
+ ensureGrantApplicationsPage(options.timeout || 20000);
+ });
}
diff --git a/applications/Unity.AutoUI/cypress/support/e2e.ts b/applications/Unity.AutoUI/cypress/support/e2e.ts
index 29ee2545b..860eac1b2 100644
--- a/applications/Unity.AutoUI/cypress/support/e2e.ts
+++ b/applications/Unity.AutoUI/cypress/support/e2e.ts
@@ -6,4 +6,14 @@
// https://on.cypress.io/configuration
// ***********************************************************
-import '../support/commands.ts'
+import '../support/commands'
+
+// Ignore ResizeObserver loop errors - these are benign browser notifications
+// that occur when ResizeObserver callbacks don't complete in a single animation frame
+Cypress.on('uncaught:exception', (err) => {
+ if (err.message.includes('ResizeObserver loop')) {
+ return false
+ }
+ // Return true to fail the test for other errors
+ return true
+})
diff --git a/applications/Unity.AutoUI/tsconfig.json b/applications/Unity.AutoUI/tsconfig.json
index 6e47c796f..89a0c8e41 100644
--- a/applications/Unity.AutoUI/tsconfig.json
+++ b/applications/Unity.AutoUI/tsconfig.json
@@ -106,5 +106,5 @@
"skipLibCheck": true /* Skip type checking all .d.ts files. */
},
// Included or excluded files or folders... https://www.typescriptlang.org/tsconfig
- "include": ["cypress/support/**/*.ts","cypress/e2e/**/*.ts"]
+ "include": ["cypress/support/**/*.ts", "cypress/e2e/**/*.ts", "cypress/pages/**/*.ts"]
}
diff --git a/applications/Unity.GrantManager/modules/Unity.Notifications/src/Unity.Notifications.Web/Views/Settings/NotificationsSettingGroup/Default.js b/applications/Unity.GrantManager/modules/Unity.Notifications/src/Unity.Notifications.Web/Views/Settings/NotificationsSettingGroup/Default.js
index fbb5a29cb..ca8c59ccc 100644
--- a/applications/Unity.GrantManager/modules/Unity.Notifications/src/Unity.Notifications.Web/Views/Settings/NotificationsSettingGroup/Default.js
+++ b/applications/Unity.GrantManager/modules/Unity.Notifications/src/Unity.Notifications.Web/Views/Settings/NotificationsSettingGroup/Default.js
@@ -285,7 +285,10 @@
selector: `#${editorId}`,
plugins: 'lists link image preview code',
toolbar: 'undo redo | styles | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist | link image | code preview | variablesDropdownButton',
- statusbar: false,
+ resize: true,
+ statusbar: true,
+ elementpath: false,
+ branding: false,
promotion: false,
content_css: false,
skin: false,
diff --git a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Integrations/Cas/CasTokenService.cs b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Integrations/Cas/CasTokenService.cs
index 225fb33fd..6f0a838ea 100644
--- a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Integrations/Cas/CasTokenService.cs
+++ b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Integrations/Cas/CasTokenService.cs
@@ -11,6 +11,7 @@
using Unity.GrantManager.Integrations.Css;
using Volo.Abp.DependencyInjection;
using Volo.Abp.TenantManagement;
+using Microsoft.Extensions.Logging;
namespace Unity.Payments.Integrations.Cas
{
[RemoteService(false)]
@@ -35,11 +36,11 @@ public async Task GetAuthTokenAsync(Guid tenantId)
var tenant = await tenantRepository.GetAsync(tenantId);
var casClientCode = tenant.ExtraProperties?["CasClientCode"]?.ToString();
-
if (string.IsNullOrEmpty(casClientCode))
{
throw new UserFriendlyException("No CAS client code configured for the current tenant. Please contact your administrator.");
}
+ Logger.LogInformation("Retrieved CAS client code {CasClientCode} for tenant {TenantId}", casClientCode, tenantId);
var casClientId = await casClientCodeLookupService.GetClientIdByCasClientCodeAsync(casClientCode)
?? throw new UserFriendlyException($"No CAS client configuration found for CAS client code: {casClientCode}");
diff --git a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Integrations/Cas/InvoiceService.cs b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Integrations/Cas/InvoiceService.cs
index b0d366d9f..57b08ccd9 100644
--- a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Integrations/Cas/InvoiceService.cs
+++ b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Integrations/Cas/InvoiceService.cs
@@ -165,6 +165,7 @@ public async Task GetCasInvoiceAsync(string invoiceNumbe
public async Task GetCasPaymentAsync(Guid tenantId, string invoiceNumber, string supplierNumber, string siteNumber)
{
+ Logger.LogInformation("GetCasPaymentAsync for Invoice: {InvoiceNumber}, SupplierNumber: {SupplierNumber}, SiteNumber: {SiteNumber}, TenantId: {TenantId}", invoiceNumber, supplierNumber, siteNumber, tenantId);
var authToken = await iTokenService.GetAuthTokenAsync(tenantId);
var casBaseUrl = await endpointManagementAppService.GetUgmUrlByKeyNameAsync(DynamicUrlKeyNames.PAYMENT_API_BASE);
var resource = $"{casBaseUrl}/{CFS_APINVOICE}/{invoiceNumber}/{supplierNumber}/{siteNumber}";
diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Application.Contracts/ApplicantProfile/IApplicantProfileContactService.cs b/applications/Unity.GrantManager/src/Unity.GrantManager.Application.Contracts/ApplicantProfile/IApplicantProfileContactService.cs
index 671c49736..3db1d7dcd 100644
--- a/applications/Unity.GrantManager/src/Unity.GrantManager.Application.Contracts/ApplicantProfile/IApplicantProfileContactService.cs
+++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Application.Contracts/ApplicantProfile/IApplicantProfileContactService.cs
@@ -7,8 +7,9 @@ namespace Unity.GrantManager.ApplicantProfile;
///
/// Provides applicant-profile-specific contact retrieval operations.
-/// This service aggregates contacts from two sources: profile-linked contacts
-/// and application-level contacts matched by OIDC subject.
+/// This service aggregates contacts from three sources: profile-linked contacts,
+/// application-level contacts matched by OIDC subject, and applicant agent
+/// contacts derived from the submission login token.
///
public interface IApplicantProfileContactService
{
@@ -26,4 +27,13 @@ public interface IApplicantProfileContactService
/// The OIDC subject identifier (e.g. "user@idir").
/// A list of with IsEditable set to false.
Task> GetApplicationContactsBySubjectAsync(string subject);
+
+ ///
+ /// Retrieves contacts derived from applicant agents on applications whose form submissions
+ /// match the given OIDC subject. The join path is Submission → Application → ApplicantAgent.
+ /// The subject is normalized by stripping the domain portion (after @) and converting to upper case.
+ ///
+ /// The OIDC subject identifier (e.g. "user@idir").
+ /// A list of with IsEditable set to false.
+ Task> GetApplicantAgentContactsBySubjectAsync(string subject);
}
diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Application.Contracts/ApplicantProfile/ProfileData/ContactInfoItemDto.cs b/applications/Unity.GrantManager/src/Unity.GrantManager.Application.Contracts/ApplicantProfile/ProfileData/ContactInfoItemDto.cs
index 2be1b4ed0..112eed817 100644
--- a/applications/Unity.GrantManager/src/Unity.GrantManager.Application.Contracts/ApplicantProfile/ProfileData/ContactInfoItemDto.cs
+++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Application.Contracts/ApplicantProfile/ProfileData/ContactInfoItemDto.cs
@@ -17,5 +17,6 @@ public class ContactInfoItemDto
public bool IsPrimary { get; set; }
public bool IsEditable { get; set; }
public Guid? ApplicationId { get; set; }
+ public string? ReferenceNo { get; set; }
}
}
diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Application/AI/OpenAIService.cs b/applications/Unity.GrantManager/src/Unity.GrantManager.Application/AI/OpenAIService.cs
index f6f9a72f4..ad7786c4b 100644
--- a/applications/Unity.GrantManager/src/Unity.GrantManager.Application/AI/OpenAIService.cs
+++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Application/AI/OpenAIService.cs
@@ -195,9 +195,9 @@ public async Task AnalyzeApplicationAsync(string applicationContent, Lis
using var schemaDoc = JsonDocument.Parse(formFieldConfiguration);
schemaPayload = schemaDoc.RootElement.Clone();
}
- catch (JsonException)
+ catch (JsonException ex)
{
- _logger.LogWarning("Invalid form field configuration JSON. Using empty schema payload.");
+ _logger.LogWarning(ex, "Invalid form field configuration JSON. Using empty schema payload.");
}
}
diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Application/AI/TextExtractionService.cs b/applications/Unity.GrantManager/src/Unity.GrantManager.Application/AI/TextExtractionService.cs
index 3c2b3f2b3..d55efddd1 100644
--- a/applications/Unity.GrantManager/src/Unity.GrantManager.Application/AI/TextExtractionService.cs
+++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Application/AI/TextExtractionService.cs
@@ -1,6 +1,7 @@
using Microsoft.Extensions.Logging;
using System;
using System.IO;
+using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
@@ -9,7 +10,7 @@
namespace Unity.GrantManager.AI
{
- public class TextExtractionService : ITextExtractionService, ITransientDependency
+ public partial class TextExtractionService : ITextExtractionService, ITransientDependency
{
private const int MaxExtractedTextLength = 50000;
private readonly ILogger _logger;
@@ -126,16 +127,16 @@ private string ExtractTextFromPdfFile(string fileName, byte[] fileContent)
using var document = PdfDocument.Open(stream);
var builder = new StringBuilder();
- foreach (var page in document.GetPages())
+ foreach (var pageText in document.GetPages().Select(page => page.Text))
{
if (builder.Length >= MaxExtractedTextLength)
{
break;
}
- if (!string.IsNullOrWhiteSpace(page.Text))
+ if (!string.IsNullOrWhiteSpace(pageText))
{
- builder.AppendLine(page.Text);
+ builder.AppendLine(pageText);
}
}
@@ -180,18 +181,14 @@ private static string NormalizeExtractedText(string text)
.Replace("\r\n", "\n")
.Replace('\r', '\n');
- normalized = Regex.Replace(normalized, @"(?<=[a-z])(?=[A-Z])", " ");
- normalized = Regex.Replace(normalized, @"(?<=[\.\,\:\;\)])(?=[A-Za-z0-9])", " ");
- normalized = Regex.Replace(normalized, @":-", ": - ");
- normalized = Regex.Replace(normalized, @"(?<=\S)- (?=[A-Za-z])", " - ");
- normalized = Regex.Replace(
- normalized,
- @"(?<=[a-z])(?=(project|funding|budget|community|summary|notes|details|planning|outcomes|background|services)\b)",
- " ",
- RegexOptions.IgnoreCase);
- normalized = Regex.Replace(normalized, @"[ \t]+", " ");
- normalized = Regex.Replace(normalized, @"\n\s*", "\n");
- normalized = Regex.Replace(normalized, @"\n{2,}", "\n");
+ normalized = LowerToUpperWordBoundaryRegex().Replace(normalized, " ");
+ normalized = PunctuationToWordBoundaryRegex().Replace(normalized, " ");
+ normalized = ColonDashSpacingRegex().Replace(normalized, ": - ");
+ normalized = HyphenSpacingRegex().Replace(normalized, " - ");
+ normalized = KeywordBoundaryRegex().Replace(normalized, " ");
+ normalized = MultipleSpacesRegex().Replace(normalized, " ");
+ normalized = NewlineWhitespaceRegex().Replace(normalized, "\n");
+ normalized = MultipleNewlinesRegex().Replace(normalized, "\n");
return normalized.Trim();
}
@@ -229,5 +226,29 @@ private static string RemoveLeadingFileNameArtifact(string text, string fileName
return text;
}
+
+ [GeneratedRegex(@"(?<=[a-z])(?=[A-Z])")]
+ private static partial Regex LowerToUpperWordBoundaryRegex();
+
+ [GeneratedRegex(@"(?<=[\.\,\:\;\)])(?=[A-Za-z0-9])")]
+ private static partial Regex PunctuationToWordBoundaryRegex();
+
+ [GeneratedRegex(@":-")]
+ private static partial Regex ColonDashSpacingRegex();
+
+ [GeneratedRegex(@"(?<=\S)- (?=[A-Za-z])")]
+ private static partial Regex HyphenSpacingRegex();
+
+ [GeneratedRegex(@"(?<=[a-z])(?=(project|funding|budget|community|summary|notes|details|planning|outcomes|background|services)\b)", RegexOptions.IgnoreCase)]
+ private static partial Regex KeywordBoundaryRegex();
+
+ [GeneratedRegex(@"[ \t]+")]
+ private static partial Regex MultipleSpacesRegex();
+
+ [GeneratedRegex(@"\n\s*")]
+ private static partial Regex NewlineWhitespaceRegex();
+
+ [GeneratedRegex(@"\n{2,}")]
+ private static partial Regex MultipleNewlinesRegex();
}
}
diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Application/ApplicantProfile/ApplicantProfileContactService.cs b/applications/Unity.GrantManager/src/Unity.GrantManager.Application/ApplicantProfile/ApplicantProfileContactService.cs
index 46ef6e66f..eba51fa13 100644
--- a/applications/Unity.GrantManager/src/Unity.GrantManager.Application/ApplicantProfile/ApplicantProfileContactService.cs
+++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Application/ApplicantProfile/ApplicantProfileContactService.cs
@@ -13,15 +13,18 @@
namespace Unity.GrantManager.ApplicantProfile;
///
-/// Applicant-profile-specific contact service. Retrieves contacts linked to applicant profiles
-/// and application-level contacts matched by OIDC subject. This service operates independently
-/// from the generic and queries repositories directly.
+/// Applicant-profile-specific contact service. Retrieves contacts linked to applicant profiles,
+/// application-level contacts matched by OIDC subject, and applicant agent contacts derived from
+/// the submission login token. This service operates independently from the generic
+/// and queries repositories directly.
///
public class ApplicantProfileContactService(
IContactRepository contactRepository,
IContactLinkRepository contactLinkRepository,
IRepository applicationFormSubmissionRepository,
- IRepository applicationContactRepository)
+ IRepository applicationContactRepository,
+ IRepository applicantAgentRepository,
+ IRepository applicationRepository)
: IApplicantProfileContactService, ITransientDependency
{
private const string ApplicantProfileEntityType = "ApplicantProfile";
@@ -52,24 +55,23 @@ join contact in contactsQuery on link.ContactId equals contact.Id
Role = link.Role,
IsPrimary = link.IsPrimary,
IsEditable = true,
- ApplicationId = null
+ ApplicationId = null,
+ ReferenceNo = null
}).ToListAsync();
}
///
public async Task> GetApplicationContactsBySubjectAsync(string subject)
{
- var normalizedSubject = subject.Contains('@')
- ? subject[..subject.IndexOf('@')].ToUpperInvariant()
- : subject.ToUpperInvariant();
-
var submissionsQuery = await applicationFormSubmissionRepository.GetQueryableAsync();
var applicationContactsQuery = await applicationContactRepository.GetQueryableAsync();
+ var applicationsQuery = await applicationRepository.GetQueryableAsync();
var applicationContacts = await (
from submission in submissionsQuery
join appContact in applicationContactsQuery on submission.ApplicationId equals appContact.ApplicationId
- where submission.OidcSub == normalizedSubject
+ join application in applicationsQuery on submission.ApplicationId equals application.Id
+ where submission.OidcSub == subject
select new ContactInfoItemDto
{
ContactId = appContact.Id,
@@ -82,12 +84,45 @@ join appContact in applicationContactsQuery on submission.ApplicationId equals a
ContactType = "Application",
IsPrimary = false,
IsEditable = false,
- ApplicationId = appContact.ApplicationId
+ ApplicationId = appContact.ApplicationId,
+ ReferenceNo = application.ReferenceNo
}).ToListAsync();
return applicationContacts;
}
+ ///
+ public async Task> GetApplicantAgentContactsBySubjectAsync(string subject)
+ {
+ var submissionsQuery = await applicationFormSubmissionRepository.GetQueryableAsync();
+ var agentsQuery = await applicantAgentRepository.GetQueryableAsync();
+ var applicationsQuery = await applicationRepository.GetQueryableAsync();
+
+ var agentContacts = await (
+ from submission in submissionsQuery
+ join agent in agentsQuery on submission.ApplicationId equals agent.ApplicationId
+ join application in applicationsQuery on submission.ApplicationId equals application.Id
+ where submission.OidcSub == subject
+ select new ContactInfoItemDto
+ {
+ ContactId = agent.Id,
+ Name = agent.Name,
+ Title = agent.Title,
+ Email = agent.Email,
+ WorkPhoneNumber = agent.Phone,
+ WorkPhoneExtension = agent.PhoneExtension,
+ MobilePhoneNumber = agent.Phone2,
+ Role = agent.RoleForApplicant,
+ ContactType = "ApplicantAgent",
+ IsPrimary = false,
+ IsEditable = false,
+ ApplicationId = agent.ApplicationId,
+ ReferenceNo = application.ReferenceNo
+ }).ToListAsync();
+
+ return agentContacts;
+ }
+
private static string GetMatchingRole(string contactType)
{
return ApplicationContactOptionList.ContactTypeList.TryGetValue(contactType, out string? value)
diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Application/ApplicantProfile/ContactInfoDataProvider.cs b/applications/Unity.GrantManager/src/Unity.GrantManager.Application/ApplicantProfile/ContactInfoDataProvider.cs
index 13bd414ee..e028bb1b2 100644
--- a/applications/Unity.GrantManager/src/Unity.GrantManager.Application/ApplicantProfile/ContactInfoDataProvider.cs
+++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Application/ApplicantProfile/ContactInfoDataProvider.cs
@@ -7,7 +7,7 @@ namespace Unity.GrantManager.ApplicantProfile
{
///
/// Provides contact information for the applicant profile by aggregating
- /// profile-linked contacts and application-level contacts.
+ /// profile-linked contacts, application-level contacts, and applicant agent contacts.
///
[ExposeServices(typeof(IApplicantProfileDataProvider))]
public class ContactInfoDataProvider(
@@ -33,8 +33,15 @@ public async Task GetDataAsync(ApplicantProfileInfoRequ
var profileContacts = await applicantProfileContactService.GetProfileContactsAsync(request.ProfileId);
dto.Contacts.AddRange(profileContacts);
- var applicationContacts = await applicantProfileContactService.GetApplicationContactsBySubjectAsync(request.Subject);
+ var normalizedSubject = request.Subject.Contains('@')
+ ? request.Subject[..request.Subject.IndexOf('@')].ToUpperInvariant()
+ : request.Subject.ToUpperInvariant();
+
+ var applicationContacts = await applicantProfileContactService.GetApplicationContactsBySubjectAsync(normalizedSubject);
dto.Contacts.AddRange(applicationContacts);
+
+ var agentContacts = await applicantProfileContactService.GetApplicantAgentContactsBySubjectAsync(normalizedSubject);
+ dto.Contacts.AddRange(agentContacts);
}
return dto;
diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/AssessmentScoresWidget/AssessmentScoresWidgetViewComponent.cs b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/AssessmentScoresWidget/AssessmentScoresWidgetViewComponent.cs
index 35236847d..4e9bb37e7 100644
--- a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/AssessmentScoresWidget/AssessmentScoresWidgetViewComponent.cs
+++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/AssessmentScoresWidget/AssessmentScoresWidgetViewComponent.cs
@@ -135,12 +135,10 @@ private static void ResolveAiAnswer(Dictionary aiAnswers, Q
{
question.AICitation = rationaleProp.ToString();
}
- if (aiAnswerValue.TryGetProperty("confidence", out var confidenceProp))
+ if (aiAnswerValue.TryGetProperty("confidence", out var confidenceProp) &&
+ confidenceProp.TryGetInt32(out var confidence))
{
- if (confidenceProp.TryGetInt32(out var confidence))
- {
- question.AIConfidence = Math.Clamp(confidence, 0, 100);
- }
+ question.AIConfidence = Math.Clamp(confidence, 0, 100);
}
}
else
diff --git a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/EmailsWidget/Default.js b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/EmailsWidget/Default.js
index 7ef97277a..79fa97983 100644
--- a/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/EmailsWidget/Default.js
+++ b/applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/EmailsWidget/Default.js
@@ -166,12 +166,16 @@
if (tinymce.get("EmailBody")) {
tinymce.get("EmailBody").remove(); // remove existing instance
}
+
tinymce.init({
license_key: 'gpl',
- selector: `#EmailBody`,
+ selector: '#EmailBody',
plugins: getPlugins(),
toolbar: getToolbarOptions(),
- statusbar: false,
+ resize: true,
+ statusbar: true,
+ elementpath: false,
+ branding: false,
promotion: false,
content_css: false,
skin: false,
@@ -608,12 +612,16 @@
if (tinymce.get("EmailBody")) {
tinymce.get("EmailBody").remove(); // remove existing instance
}
+
tinymce.init({
license_key: 'gpl',
- selector: `#EmailBody`,
+ selector: '#EmailBody',
plugins: getPlugins(),
toolbar: getToolbarOptions(),
- statusbar: false,
+ resize: true,
+ statusbar: true,
+ elementpath: false,
+ branding: false,
promotion: false,
content_css: false,
skin: false,
diff --git a/applications/Unity.GrantManager/test/Unity.GrantManager.Application.Tests/Applicants/ApplicantProfileDataProviderTests.cs b/applications/Unity.GrantManager/test/Unity.GrantManager.Application.Tests/Applicants/ApplicantProfileDataProviderTests.cs
index cc8d41a68..7d7c20fc7 100644
--- a/applications/Unity.GrantManager/test/Unity.GrantManager.Application.Tests/Applicants/ApplicantProfileDataProviderTests.cs
+++ b/applications/Unity.GrantManager/test/Unity.GrantManager.Application.Tests/Applicants/ApplicantProfileDataProviderTests.cs
@@ -34,6 +34,8 @@ private static ContactInfoDataProvider CreateContactInfoDataProvider()
.Returns(Task.FromResult(new List()));
applicantProfileContactService.GetApplicationContactsBySubjectAsync(Arg.Any())
.Returns(Task.FromResult(new List()));
+ applicantProfileContactService.GetApplicantAgentContactsBySubjectAsync(Arg.Any())
+ .Returns(Task.FromResult(new List()));
return new ContactInfoDataProvider(currentTenant, applicantProfileContactService);
}
diff --git a/applications/Unity.GrantManager/test/Unity.GrantManager.Application.Tests/Contacts/ContactInfoDataProviderTests.cs b/applications/Unity.GrantManager/test/Unity.GrantManager.Application.Tests/Contacts/ContactInfoDataProviderTests.cs
index 976ad574c..dde051f27 100644
--- a/applications/Unity.GrantManager/test/Unity.GrantManager.Application.Tests/Contacts/ContactInfoDataProviderTests.cs
+++ b/applications/Unity.GrantManager/test/Unity.GrantManager.Application.Tests/Contacts/ContactInfoDataProviderTests.cs
@@ -22,6 +22,14 @@ public ContactInfoDataProviderTests()
_currentTenant = Substitute.For();
_currentTenant.Change(Arg.Any()).Returns(Substitute.For());
_applicantProfileContactService = Substitute.For();
+
+ _applicantProfileContactService.GetProfileContactsAsync(Arg.Any())
+ .Returns(new List());
+ _applicantProfileContactService.GetApplicationContactsBySubjectAsync(Arg.Any())
+ .Returns(new List());
+ _applicantProfileContactService.GetApplicantAgentContactsBySubjectAsync(Arg.Any())
+ .Returns(new List());
+
_provider = new ContactInfoDataProvider(_currentTenant, _applicantProfileContactService);
}
@@ -38,10 +46,6 @@ public async Task GetDataAsync_ShouldChangeTenant()
{
// Arrange
var request = CreateRequest();
- _applicantProfileContactService.GetProfileContactsAsync(Arg.Any())
- .Returns(new List());
- _applicantProfileContactService.GetApplicationContactsBySubjectAsync(Arg.Any())
- .Returns(new List());
// Act
await _provider.GetDataAsync(request);
@@ -55,10 +59,6 @@ public async Task GetDataAsync_ShouldCallGetProfileContactsWithProfileId()
{
// Arrange
var request = CreateRequest();
- _applicantProfileContactService.GetProfileContactsAsync(Arg.Any())
- .Returns(new List());
- _applicantProfileContactService.GetApplicationContactsBySubjectAsync(Arg.Any())
- .Returns(new List());
// Act
await _provider.GetDataAsync(request);
@@ -72,20 +72,29 @@ public async Task GetDataAsync_ShouldCallGetApplicationContactsWithSubject()
{
// Arrange
var request = CreateRequest();
- _applicantProfileContactService.GetProfileContactsAsync(Arg.Any())
- .Returns(new List());
- _applicantProfileContactService.GetApplicationContactsBySubjectAsync(Arg.Any())
- .Returns(new List());
// Act
await _provider.GetDataAsync(request);
// Assert
- await _applicantProfileContactService.Received(1).GetApplicationContactsBySubjectAsync(request.Subject);
+ await _applicantProfileContactService.Received(1).GetApplicationContactsBySubjectAsync("TESTUSER");
}
[Fact]
- public async Task GetDataAsync_ShouldCombineBothContactSets()
+ public async Task GetDataAsync_ShouldCallGetApplicantAgentContactsWithSubject()
+ {
+ // Arrange
+ var request = CreateRequest();
+
+ // Act
+ await _provider.GetDataAsync(request);
+
+ // Assert
+ await _applicantProfileContactService.Received(1).GetApplicantAgentContactsBySubjectAsync("TESTUSER");
+ }
+
+ [Fact]
+ public async Task GetDataAsync_ShouldCombineAllContactSets()
{
// Arrange
var request = CreateRequest();
@@ -98,17 +107,22 @@ public async Task GetDataAsync_ShouldCombineBothContactSets()
{
new() { ContactId = Guid.NewGuid(), Name = "App Contact 1", IsEditable = false }
};
+ var agentContacts = new List
+ {
+ new() { ContactId = Guid.NewGuid(), Name = "Agent Contact 1", IsEditable = false, ContactType = "ApplicantAgent" }
+ };
_applicantProfileContactService.GetProfileContactsAsync(request.ProfileId).Returns(profileContacts);
- _applicantProfileContactService.GetApplicationContactsBySubjectAsync(request.Subject).Returns(appContacts);
+ _applicantProfileContactService.GetApplicationContactsBySubjectAsync("TESTUSER").Returns(appContacts);
+ _applicantProfileContactService.GetApplicantAgentContactsBySubjectAsync("TESTUSER").Returns(agentContacts);
// Act
var result = await _provider.GetDataAsync(request);
// Assert
var dto = result.ShouldBeOfType();
- dto.Contacts.Count.ShouldBe(3);
+ dto.Contacts.Count.ShouldBe(4);
dto.Contacts.Count(c => c.IsEditable).ShouldBe(2);
- dto.Contacts.Count(c => !c.IsEditable).ShouldBe(1);
+ dto.Contacts.Count(c => !c.IsEditable).ShouldBe(2);
}
[Fact]
@@ -116,10 +130,6 @@ public async Task GetDataAsync_WithNoContacts_ShouldReturnEmptyList()
{
// Arrange
var request = CreateRequest();
- _applicantProfileContactService.GetProfileContactsAsync(Arg.Any())
- .Returns(new List());
- _applicantProfileContactService.GetApplicationContactsBySubjectAsync(Arg.Any())
- .Returns(new List());
// Act
var result = await _provider.GetDataAsync(request);
@@ -130,7 +140,7 @@ public async Task GetDataAsync_WithNoContacts_ShouldReturnEmptyList()
}
[Fact]
- public async Task GetDataAsync_ProfileContactsShouldAppearBeforeApplicationContacts()
+ public async Task GetDataAsync_ContactsShouldAppearInExpectedOrder()
{
// Arrange
var request = CreateRequest();
@@ -146,10 +156,19 @@ public async Task GetDataAsync_ProfileContactsShouldAppearBeforeApplicationConta
Name = "App Second",
IsEditable = false
};
+ var agentContact = new ContactInfoItemDto
+ {
+ ContactId = Guid.NewGuid(),
+ Name = "Agent Third",
+ IsEditable = false,
+ ContactType = "ApplicantAgent"
+ };
_applicantProfileContactService.GetProfileContactsAsync(request.ProfileId)
.Returns(new List { profileContact });
- _applicantProfileContactService.GetApplicationContactsBySubjectAsync(request.Subject)
+ _applicantProfileContactService.GetApplicationContactsBySubjectAsync("TESTUSER")
.Returns(new List { appContact });
+ _applicantProfileContactService.GetApplicantAgentContactsBySubjectAsync("TESTUSER")
+ .Returns(new List { agentContact });
// Act
var result = await _provider.GetDataAsync(request);
@@ -158,6 +177,7 @@ public async Task GetDataAsync_ProfileContactsShouldAppearBeforeApplicationConta
var dto = result.ShouldBeOfType();
dto.Contacts[0].Name.ShouldBe("Profile First");
dto.Contacts[1].Name.ShouldBe("App Second");
+ dto.Contacts[2].Name.ShouldBe("Agent Third");
}
[Fact]
@@ -165,10 +185,6 @@ public async Task GetDataAsync_ShouldReturnCorrectDataType()
{
// Arrange
var request = CreateRequest();
- _applicantProfileContactService.GetProfileContactsAsync(Arg.Any())
- .Returns(new List());
- _applicantProfileContactService.GetApplicationContactsBySubjectAsync(Arg.Any())
- .Returns(new List());
// Act
var result = await _provider.GetDataAsync(request);
diff --git a/applications/Unity.GrantManager/test/Unity.GrantManager.Application.Tests/Contacts/ContactInfoServiceTests.cs b/applications/Unity.GrantManager/test/Unity.GrantManager.Application.Tests/Contacts/ContactInfoServiceTests.cs
index 48fadd7b9..874f16fd3 100644
--- a/applications/Unity.GrantManager/test/Unity.GrantManager.Application.Tests/Contacts/ContactInfoServiceTests.cs
+++ b/applications/Unity.GrantManager/test/Unity.GrantManager.Application.Tests/Contacts/ContactInfoServiceTests.cs
@@ -18,6 +18,8 @@ public class ApplicantProfileContactServiceTests
private readonly IContactLinkRepository _contactLinkRepository;
private readonly IRepository _submissionRepository;
private readonly IRepository _applicationContactRepository;
+ private readonly IRepository _applicantAgentRepository;
+ private readonly IRepository _applicationRepository;
private readonly ApplicantProfileContactService _service;
public ApplicantProfileContactServiceTests()
@@ -26,12 +28,16 @@ public ApplicantProfileContactServiceTests()
_contactLinkRepository = Substitute.For();
_submissionRepository = Substitute.For>();
_applicationContactRepository = Substitute.For>();
+ _applicantAgentRepository = Substitute.For>();
+ _applicationRepository = Substitute.For>();
_service = new ApplicantProfileContactService(
_contactRepository,
_contactLinkRepository,
_submissionRepository,
- _applicationContactRepository);
+ _applicationContactRepository,
+ _applicantAgentRepository,
+ _applicationRepository);
}
private static T WithId(T entity, Guid id) where T : Entity
@@ -143,11 +149,20 @@ public async Task GetApplicationContactsBySubjectAsync_WithMatchingSubmission_Sh
}, appContactId)
}.AsAsyncQueryable();
+ var applications = new[]
+ {
+ WithId(new Application
+ {
+ ReferenceNo = "REF-001"
+ }, applicationId)
+ }.AsAsyncQueryable();
+
_submissionRepository.GetQueryableAsync().Returns(submissions);
_applicationContactRepository.GetQueryableAsync().Returns(applicationContacts);
+ _applicationRepository.GetQueryableAsync().Returns(applications);
// Act
- var result = await _service.GetApplicationContactsBySubjectAsync("testuser@idir");
+ var result = await _service.GetApplicationContactsBySubjectAsync("TESTUSER");
// Assert
result.Count.ShouldBe(1);
@@ -163,10 +178,11 @@ public async Task GetApplicationContactsBySubjectAsync_WithMatchingSubmission_Sh
contact.IsPrimary.ShouldBeFalse();
contact.IsEditable.ShouldBeFalse();
contact.ApplicationId.ShouldBe(applicationId);
+ contact.ReferenceNo.ShouldBe("REF-001");
}
[Fact]
- public async Task GetApplicationContactsBySubjectAsync_ShouldMatchCaseInsensitively()
+ public async Task GetApplicationContactsBySubjectAsync_WithNonMatchingSubject_ShouldReturnEmpty()
{
// Arrange
var applicationId = Guid.NewGuid();
@@ -175,7 +191,7 @@ public async Task GetApplicationContactsBySubjectAsync_ShouldMatchCaseInsensitiv
{
new ApplicationFormSubmission
{
- OidcSub = "TESTUSER",
+ OidcSub = "OTHERUSER",
ApplicationId = applicationId,
ApplicantId = Guid.NewGuid(),
ApplicationFormId = Guid.NewGuid()
@@ -187,71 +203,60 @@ public async Task GetApplicationContactsBySubjectAsync_ShouldMatchCaseInsensitiv
WithId(new ApplicationContact
{
ApplicationId = applicationId,
- ContactFullName = "Case Test",
- ContactType = "ADDITIONAL_CONTACT"
+ ContactFullName = "Should Not Match"
}, Guid.NewGuid())
}.AsAsyncQueryable();
_submissionRepository.GetQueryableAsync().Returns(submissions);
_applicationContactRepository.GetQueryableAsync().Returns(applicationContacts);
+ _applicationRepository.GetQueryableAsync().Returns(
+ new[] { WithId(new Application(), applicationId) }.AsAsyncQueryable());
// Act
- var result = await _service.GetApplicationContactsBySubjectAsync("testuser@IDIR");
+ var result = await _service.GetApplicationContactsBySubjectAsync("DIFFERENTUSER");
// Assert
- result.Count.ShouldBe(1);
+ result.ShouldBeEmpty();
}
[Fact]
- public async Task GetApplicationContactsBySubjectAsync_ShouldStripDomainFromSubject()
+ public async Task GetApplicationContactsBySubjectAsync_WithNoSubmissions_ShouldReturnEmpty()
{
// Arrange
- var applicationId = Guid.NewGuid();
-
- var submissions = new[]
- {
- new ApplicationFormSubmission
- {
- OidcSub = "MYUSER",
- ApplicationId = applicationId,
- ApplicantId = Guid.NewGuid(),
- ApplicationFormId = Guid.NewGuid()
- }
- }.AsAsyncQueryable();
-
- var applicationContacts = new[]
- {
- WithId(new ApplicationContact
- {
- ApplicationId = applicationId,
- ContactFullName = "Domain Strip Test",
- ContactType = "ADDITIONAL_CONTACT"
- }, Guid.NewGuid())
- }.AsAsyncQueryable();
-
- _submissionRepository.GetQueryableAsync().Returns(submissions);
- _applicationContactRepository.GetQueryableAsync().Returns(applicationContacts);
+ _submissionRepository.GetQueryableAsync()
+ .Returns(Array.Empty().AsAsyncQueryable());
+ _applicationContactRepository.GetQueryableAsync()
+ .Returns(Array.Empty().AsAsyncQueryable());
+ _applicationRepository.GetQueryableAsync()
+ .Returns(Array.Empty().AsAsyncQueryable());
// Act
- var result = await _service.GetApplicationContactsBySubjectAsync("myuser@differentdomain");
+ var result = await _service.GetApplicationContactsBySubjectAsync("TESTUSER");
// Assert
- result.Count.ShouldBe(1);
- result[0].Name.ShouldBe("Domain Strip Test");
+ result.ShouldBeEmpty();
}
[Fact]
- public async Task GetApplicationContactsBySubjectAsync_WithSubjectWithoutAtSign_ShouldStillMatch()
+ public async Task GetApplicationContactsBySubjectAsync_WithMultipleSubmissions_ShouldReturnAllContacts()
{
// Arrange
- var applicationId = Guid.NewGuid();
+ var appId1 = Guid.NewGuid();
+ var appId2 = Guid.NewGuid();
var submissions = new[]
{
new ApplicationFormSubmission
{
- OidcSub = "PLAINUSER",
- ApplicationId = applicationId,
+ OidcSub = "TESTUSER",
+ ApplicationId = appId1,
+ ApplicantId = Guid.NewGuid(),
+ ApplicationFormId = Guid.NewGuid()
+ },
+ new ApplicationFormSubmission
+ {
+ OidcSub = "TESTUSER",
+ ApplicationId = appId2,
ApplicantId = Guid.NewGuid(),
ApplicationFormId = Guid.NewGuid()
}
@@ -261,125 +266,112 @@ public async Task GetApplicationContactsBySubjectAsync_WithSubjectWithoutAtSign_
{
WithId(new ApplicationContact
{
- ApplicationId = applicationId,
- ContactFullName = "Plain User Contact",
+ ApplicationId = appId1,
+ ContactFullName = "Contact App 1",
ContactType = "ADDITIONAL_CONTACT"
+ }, Guid.NewGuid()),
+ WithId(new ApplicationContact
+ {
+ ApplicationId = appId2,
+ ContactFullName = "Contact App 2",
+ ContactType = "ADDITIONAL_SIGNING_AUTHORITY"
}, Guid.NewGuid())
}.AsAsyncQueryable();
_submissionRepository.GetQueryableAsync().Returns(submissions);
_applicationContactRepository.GetQueryableAsync().Returns(applicationContacts);
+ _applicationRepository.GetQueryableAsync().Returns(
+ new[]
+ {
+ WithId(new Application(), appId1),
+ WithId(new Application(), appId2)
+ }.AsAsyncQueryable());
// Act
- var result = await _service.GetApplicationContactsBySubjectAsync("plainuser");
+ var result = await _service.GetApplicationContactsBySubjectAsync("TESTUSER");
// Assert
- result.Count.ShouldBe(1);
+ result.Count.ShouldBe(2);
+ result.ShouldAllBe(c => !c.IsEditable);
+ result.ShouldAllBe(c => !c.IsPrimary);
}
[Fact]
- public async Task GetApplicationContactsBySubjectAsync_WithNonMatchingSubject_ShouldReturnEmpty()
+ public async Task GetApplicantAgentContactsBySubjectAsync_WithMatchingSubmission_ShouldReturnAgentContacts()
{
// Arrange
var applicationId = Guid.NewGuid();
+ var agentId = Guid.NewGuid();
var submissions = new[]
{
new ApplicationFormSubmission
{
- OidcSub = "OTHERUSER",
+ OidcSub = "TESTUSER",
ApplicationId = applicationId,
ApplicantId = Guid.NewGuid(),
ApplicationFormId = Guid.NewGuid()
}
}.AsAsyncQueryable();
- var applicationContacts = new[]
+ var agents = new[]
{
- WithId(new ApplicationContact
+ WithId(new ApplicantAgent
{
ApplicationId = applicationId,
- ContactFullName = "Should Not Match"
- }, Guid.NewGuid())
+ ApplicantId = Guid.NewGuid(),
+ Name = "Agent Smith",
+ Title = "Signing Authority",
+ Email = "agent@example.com",
+ Phone = "777-7777",
+ PhoneExtension = "201",
+ Phone2 = "888-8888",
+ RoleForApplicant = "Primary Contact"
+ }, agentId)
}.AsAsyncQueryable();
_submissionRepository.GetQueryableAsync().Returns(submissions);
- _applicationContactRepository.GetQueryableAsync().Returns(applicationContacts);
+ _applicantAgentRepository.GetQueryableAsync().Returns(agents);
+ _applicationRepository.GetQueryableAsync().Returns(
+ new[] { WithId(new Application { ReferenceNo = "REF-AGENT-001" }, applicationId) }.AsAsyncQueryable());
// Act
- var result = await _service.GetApplicationContactsBySubjectAsync("differentuser@idir");
+ var result = await _service.GetApplicantAgentContactsBySubjectAsync("TESTUSER");
// Assert
- result.ShouldBeEmpty();
+ result.Count.ShouldBe(1);
+ var contact = result[0];
+ contact.ContactId.ShouldBe(agentId);
+ contact.Name.ShouldBe("Agent Smith");
+ contact.Title.ShouldBe("Signing Authority");
+ contact.Email.ShouldBe("agent@example.com");
+ contact.WorkPhoneNumber.ShouldBe("777-7777");
+ contact.WorkPhoneExtension.ShouldBe("201");
+ contact.MobilePhoneNumber.ShouldBe("888-8888");
+ contact.Role.ShouldBe("Primary Contact");
+ contact.ContactType.ShouldBe("ApplicantAgent");
+ contact.IsPrimary.ShouldBeFalse();
+ contact.IsEditable.ShouldBeFalse();
+ contact.ApplicationId.ShouldBe(applicationId);
+ contact.ReferenceNo.ShouldBe("REF-AGENT-001");
}
[Fact]
- public async Task GetApplicationContactsBySubjectAsync_WithNoSubmissions_ShouldReturnEmpty()
+ public async Task GetApplicantAgentContactsBySubjectAsync_WithNoMatchingSubmissions_ShouldReturnEmpty()
{
// Arrange
_submissionRepository.GetQueryableAsync()
.Returns(Array.Empty().AsAsyncQueryable());
- _applicationContactRepository.GetQueryableAsync()
- .Returns(Array.Empty().AsAsyncQueryable());
+ _applicantAgentRepository.GetQueryableAsync()
+ .Returns(Array.Empty().AsAsyncQueryable());
+ _applicationRepository.GetQueryableAsync()
+ .Returns(Array.Empty().AsAsyncQueryable());
// Act
- var result = await _service.GetApplicationContactsBySubjectAsync("testuser@idir");
+ var result = await _service.GetApplicantAgentContactsBySubjectAsync("TESTUSER");
// Assert
result.ShouldBeEmpty();
}
-
- [Fact]
- public async Task GetApplicationContactsBySubjectAsync_WithMultipleSubmissions_ShouldReturnAllContacts()
- {
- // Arrange
- var appId1 = Guid.NewGuid();
- var appId2 = Guid.NewGuid();
-
- var submissions = new[]
- {
- new ApplicationFormSubmission
- {
- OidcSub = "TESTUSER",
- ApplicationId = appId1,
- ApplicantId = Guid.NewGuid(),
- ApplicationFormId = Guid.NewGuid()
- },
- new ApplicationFormSubmission
- {
- OidcSub = "TESTUSER",
- ApplicationId = appId2,
- ApplicantId = Guid.NewGuid(),
- ApplicationFormId = Guid.NewGuid()
- }
- }.AsAsyncQueryable();
-
- var applicationContacts = new[]
- {
- WithId(new ApplicationContact
- {
- ApplicationId = appId1,
- ContactFullName = "Contact App 1",
- ContactType = "ADDITIONAL_CONTACT"
- }, Guid.NewGuid()),
- WithId(new ApplicationContact
- {
- ApplicationId = appId2,
- ContactFullName = "Contact App 2",
- ContactType = "ADDITIONAL_SIGNING_AUTHORITY"
- }, Guid.NewGuid())
- }.AsAsyncQueryable();
-
- _submissionRepository.GetQueryableAsync().Returns(submissions);
- _applicationContactRepository.GetQueryableAsync().Returns(applicationContacts);
-
- // Act
- var result = await _service.GetApplicationContactsBySubjectAsync("testuser@idir");
-
- // Assert
- result.Count.ShouldBe(2);
- result.ShouldAllBe(c => !c.IsEditable);
- result.ShouldAllBe(c => !c.IsPrimary);
- }
}
}
diff --git a/database/scripts/unitydb-census-subdivision-script.sql b/database/scripts/unitydb-census-subdivision-script.sql
deleted file mode 100644
index ee74246b0..000000000
--- a/database/scripts/unitydb-census-subdivision-script.sql
+++ /dev/null
@@ -1,19 +0,0 @@
-
-DO $$
-DECLARE
- json_data jsonb := '[{"CensusSubdivisionName":"Ahahswinis 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Alberni 2","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Alberni-Clayoquot A","Type":"Regional district electoral area","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Alberni-Clayoquot B","Type":"Regional district electoral area","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Alberni-Clayoquot C","Type":"Regional district electoral area","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Alberni-Clayoquot D","Type":"Regional district electoral area","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Alberni-Clayoquot E","Type":"Regional district electoral area","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Alberni-Clayoquot F","Type":"Regional district electoral area","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Anacla 12","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Clakamucus 2","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Elhlateese 2","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Esowista 3","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Hesquiat 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Ittatsoo 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Klehkoot 2","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Macoah 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Marktosis 15","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Numukamis 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Opitsat 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Port Alberni","Type":"City","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Refuge Cove 6","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Sachsa 4","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Tin Wis 11","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Tofino","Type":"District municipality","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Tsahaheh 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Ucluelet","Type":"District municipality","RegionalDistrictCode":"4"},{"CensusSubdivisionName":"Babine 16","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Babine 25","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Babine 6","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Babine Lake 21B","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Binche 2","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Bulkley-Nechako A","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Bulkley-Nechako B","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Bulkley-Nechako C","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Bulkley-Nechako D","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Bulkley-Nechako E","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Bulkley-Nechako F","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Bulkley-Nechako G","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Burns Lake","Type":"Village","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Burns Lake 18","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Cheslatta 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Duncan Lake 2","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Dzitline Lee 9","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Fort St. James","Type":"District municipality","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Francois Lake 7","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Fraser Lake","Type":"Village","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Granisle","Type":"Village","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Houston","Type":"District municipality","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Jean Baptiste 28","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Laketown 3","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Mission Lands 17","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Nak''azdli","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Nautley (Fort Fraser) 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Nedoats 11","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Noonla 6","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"North Tacla Lake","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Omineca 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Palling 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Poison Creek 17A","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Seaspunkut 4","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Skins Lake 16A","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Skins Lake 16B","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Smithers","Type":"Town","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Sowchea 3","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Stellaquo (Stella) 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Stony Creek 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Tache 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Tacla Lake (Ferry Landing) 9","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Tadinlay 15","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Tatla West 11","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Tatla''t East 2","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Telkwa","Type":"Village","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Uncha Lake 13A","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Vanderhoof","Type":"District municipality","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Williams Prairie Meadow 1A","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Woyenne 27","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Ye Koo Che 3","Type":"Indian reserve","RegionalDistrictCode":"26"},{"CensusSubdivisionName":"Becher Bay 1","Type":"Indian reserve","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Central Saanich","Type":"District municipality","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Cole Bay 3","Type":"Indian reserve","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Colwood","Type":"City","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"East Saanich 2","Type":"Indian reserve","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Esquimalt - District municipality","Type":"District municipality","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Esquimalt - Indian reserve","Type":"Indian reserve","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Galiano Island 9","Type":"Indian reserve","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Gordon River 2","Type":"Indian reserve","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Highlands","Type":"District municipality","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Juan de Fuca (Part 1)","Type":"Regional district electoral area","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Juan de Fuca (Part 2)","Type":"Regional district electoral area","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Langford","Type":"City","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Metchosin","Type":"District municipality","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"New Songhees 1A","Type":"Indian reserve","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"North Saanich","Type":"District municipality","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Oak Bay","Type":"District municipality","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Saanich","Type":"District municipality","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Saltspring Island","Type":"Regional district electoral area","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Sidney","Type":"Town","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Sooke","Type":"District municipality","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"South Saanich 1","Type":"Indian reserve","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Southern Gulf Islands","Type":"Regional district electoral area","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"T''Sou-ke","Type":"Indian reserve","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Union Bay 4","Type":"Indian reserve","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Victoria","Type":"City","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"View Royal","Type":"Town","RegionalDistrictCode":"1"},{"CensusSubdivisionName":"Agats Meadow 8","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Alexandria","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Alexis Creek 14","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Alexis Creek 16","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Alexis Creek 21","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Alexis Creek 34","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Alkali Lake 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Alkali Lake 4A","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Anahim''s Flat 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Anahim''s Meadow","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Baezaeko River 27","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Baptiste Meadow 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Betty Creek 18","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Canim Lake 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Canim Lake 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Canim Lake 4","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Canoe Creek 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Cariboo A","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Cariboo B","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Cariboo C","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Cariboo D","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Cariboo E","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Cariboo F","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Cariboo G","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Cariboo H","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Cariboo I","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Cariboo J","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Cariboo K","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Cariboo L","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Charley Boy''s Meadow 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Chilco Lake 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Chilco Lake 1A","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Coglistiko River 29","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Deep Creek 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Dog Creek 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Dog Creek 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Dragon Lake 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Euchinico Creek 17","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Fishtrap 19","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Garden","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Johny Sticks 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Kluskus 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Lezbye 6","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Little Springs","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Lohbiee 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Michel Gardens 36","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Nazco 20","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"One Hundred Mile House","Type":"District municipality","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Puntzi Lake 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Quesnel","Type":"City","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Quesnel 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Redstone Flat 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Salmon River Meadow 7","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Sandy Harry 4","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Soda Creek 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Squinas 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Stone 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Sundayman''s Meadow 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Swan Lake 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Tanakut 4","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Thomas Squinas Ranch 2A","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Toosey 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Towdystan Lake 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Trout Lake Alec 16","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Ulkatcho 13","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Ulkatcho 14A","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Wells","Type":"District municipality","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Williams Lake","Type":"City","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Williams Lake 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Windy Mouth 7","Type":"Indian reserve","RegionalDistrictCode":"22"},{"CensusSubdivisionName":"Bella Bella 1","Type":"Indian reserve","RegionalDistrictCode":"9"},{"CensusSubdivisionName":"Bella Coola 1","Type":"Indian reserve","RegionalDistrictCode":"9"},{"CensusSubdivisionName":"Central Coast A","Type":"Regional district electoral area","RegionalDistrictCode":"9"},{"CensusSubdivisionName":"Central Coast C","Type":"Regional district electoral area","RegionalDistrictCode":"9"},{"CensusSubdivisionName":"Central Coast D","Type":"Regional district electoral area","RegionalDistrictCode":"9"},{"CensusSubdivisionName":"Central Coast E","Type":"Regional district electoral area","RegionalDistrictCode":"9"},{"CensusSubdivisionName":"Katit 1","Type":"Indian reserve","RegionalDistrictCode":"9"},{"CensusSubdivisionName":"Castlegar","Type":"City","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Central Kootenay A","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Central Kootenay B","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Central Kootenay C","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Central Kootenay D","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Central Kootenay E","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Central Kootenay F","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Central Kootenay G","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Central Kootenay H","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Central Kootenay I","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Central Kootenay J","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Central Kootenay K","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Creston","Type":"Town","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Creston 1","Type":"Indian reserve","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Kaslo","Type":"Village","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Nakusp","Type":"Village","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Nelson","Type":"City","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"New Denver","Type":"Village","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Salmo","Type":"Village","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Silverton","Type":"Village","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Slocan","Type":"Village","RegionalDistrictCode":"20"},{"CensusSubdivisionName":"Central Okanagan","Type":"Regional district electoral area","RegionalDistrictCode":"16"},{"CensusSubdivisionName":"Central Okanagan West","Type":"Regional district electoral area","RegionalDistrictCode":"16"},{"CensusSubdivisionName":"Duck Lake 7","Type":"Indian reserve","RegionalDistrictCode":"16"},{"CensusSubdivisionName":"Kelowna","Type":"City","RegionalDistrictCode":"16"},{"CensusSubdivisionName":"Lake Country","Type":"District municipality","RegionalDistrictCode":"16"},{"CensusSubdivisionName":"Peachland","Type":"District municipality","RegionalDistrictCode":"16"},{"CensusSubdivisionName":"Tsinstikeptum 10","Type":"Indian reserve","RegionalDistrictCode":"16"},{"CensusSubdivisionName":"Tsinstikeptum 9","Type":"Indian reserve","RegionalDistrictCode":"16"},{"CensusSubdivisionName":"West Kelowna","Type":"City","RegionalDistrictCode":"16"},{"CensusSubdivisionName":"Chum Creek 2","Type":"Indian reserve","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Columbia-Shuswap A","Type":"Regional district electoral area","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Columbia-Shuswap B","Type":"Regional district electoral area","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Columbia-Shuswap C","Type":"Regional district electoral area","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Columbia-Shuswap D","Type":"Regional district electoral area","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Columbia-Shuswap E","Type":"Regional district electoral area","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Columbia-Shuswap F","Type":"Regional district electoral area","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Golden","Type":"Town","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Hustalen 1","Type":"Indian reserve","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"North Bay 5","Type":"Indian reserve","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Okanagan (Part) 1 - Thompson/Okanagan","Type":"Indian reserve","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Quaaout 1","Type":"Indian reserve","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Revelstoke","Type":"City","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Salmon Arm","Type":"City","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Salmon River 1","Type":"Indian reserve","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Scotch Creek 4","Type":"Indian reserve","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Sicamous","Type":"District municipality","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Switsemalph","Type":"Indian reserve","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Switsemalph 3","Type":"Indian reserve","RegionalDistrictCode":"18"},{"CensusSubdivisionName":"Comox","Type":"Town","RegionalDistrictCode":"6"},{"CensusSubdivisionName":"Comox 1","Type":"Indian reserve","RegionalDistrictCode":"6"},{"CensusSubdivisionName":"Comox Valley A","Type":"Regional district electoral area","RegionalDistrictCode":"6"},{"CensusSubdivisionName":"Comox Valley B (Lazo North)","Type":"Regional district electoral area","RegionalDistrictCode":"6"},{"CensusSubdivisionName":"Comox Valley C (Puntledge - Black Creek)","Type":"Regional district electoral area","RegionalDistrictCode":"6"},{"CensusSubdivisionName":"Courtenay","Type":"City","RegionalDistrictCode":"6"},{"CensusSubdivisionName":"Cumberland","Type":"Village","RegionalDistrictCode":"6"},{"CensusSubdivisionName":"Pentledge 2","Type":"Indian reserve","RegionalDistrictCode":"6"},{"CensusSubdivisionName":"Chemainus 13","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Cowichan","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Cowichan Lake","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Cowichan Valley A","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Cowichan Valley B","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Cowichan Valley C","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Cowichan Valley D","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Cowichan Valley E","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Cowichan Valley F","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Cowichan Valley G","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Cowichan Valley H","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Cowichan Valley I","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Duncan","Type":"City","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Est-Patrolas 4","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Halalt 2","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Kil-pah-las 3","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Ladysmith","Type":"Town","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Lake Cowichan","Type":"Town","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Lyacksun 3","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Malachan 11","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Malahat 11","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"North Cowichan","Type":"District municipality","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Oyster Bay 12","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Penelakut Island 7","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Portier Pass 5","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Shingle Point 4","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Squaw-Hay-One 11","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Theik 2","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Tsussie 6","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Tzart-Lam 5","Type":"Indian reserve","RegionalDistrictCode":"2"},{"CensusSubdivisionName":"Canal Flats","Type":"Village","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Cassimayooks (Mayook) 5","Type":"Indian reserve","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Columbia Lake 3","Type":"Indian reserve","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Cranbrook","Type":"City","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"East Kootenay A","Type":"Regional district electoral area","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"East Kootenay B","Type":"Regional district electoral area","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"East Kootenay C","Type":"Regional district electoral area","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"East Kootenay E","Type":"Regional district electoral area","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"East Kootenay F","Type":"Regional district electoral area","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"East Kootenay G","Type":"Regional district electoral area","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Elkford","Type":"District municipality","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Fernie","Type":"City","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Invermere","Type":"District municipality","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Isidore''s Ranch 4","Type":"Indian reserve","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Kimberley","Type":"City","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Kootenay 1","Type":"Indian reserve","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Radium Hot Springs","Type":"Village","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Shuswap","Type":"Indian reserve","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Sparwood","Type":"District municipality","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"St. Mary''s","Type":"Indian reserve","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Tobacco Plains 2","Type":"Indian reserve","RegionalDistrictCode":"19"},{"CensusSubdivisionName":"Abbotsford","Type":"City","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Aitchelitch 9","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Albert Flat 5","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Boothroyd 13","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Boston Bar 1A","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Bucktum 4","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Chawathil 4","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Cheam 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Chehalis 5","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Chilliwack","Type":"City","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Douglas 8","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Fraser Valley A","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Fraser Valley B","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Fraser Valley C","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Fraser Valley D","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Fraser Valley E","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Fraser Valley F","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Fraser Valley G","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Fraser Valley H","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Harrison Hot Springs","Type":"Village","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Holachten 8","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Hope","Type":"District municipality","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Inkahtsaph 6","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Kahmoose 4","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Kent","Type":"District municipality","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Kopchitchin 2","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Kwawkwawapilt 6","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Lakahahmen 11","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Langley 2","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Lukseetsissum 9","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Matsqui Main 2","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Mission","Type":"District municipality","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Ohamil 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Paqulh","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Peters 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Popkum 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Puckatholetchin 11","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Q''alatkú7em","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Ruby Creek 2","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Sachteen","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Saddle Rock 9","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Schelowat 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Schkam 2","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Scowlitz 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Seabird Island","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Skawahlook 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Skookumchuck 4","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Skowkale","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Skwah 4","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Skwali 3","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Skway 5","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Skweahm 10","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Soowahlie 14","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Speyum 3","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Spuzzum 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Squawkum Creek 3","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Squiaala","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Stullawheets 8","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Tipella 7","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Tseatah 2","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Tuckkwiowhum 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Tzeachten 13","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Upper Sumas 6","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Yakweakwioose 12","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Yale Town 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"CensusSubdivisionName":"Fort George 2","Type":"Indian reserve","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"Fraser-Fort George A","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"Fraser-Fort George C","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"Fraser-Fort George D","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"Fraser-Fort George E","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"Fraser-Fort George F","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"Fraser-Fort George G","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"Fraser-Fort George H","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"Mackenzie","Type":"District municipality","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"McBride","Type":"Village","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"McLeod Lake 1","Type":"Indian reserve","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"Prince George","Type":"City","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"Valemount","Type":"Village","RegionalDistrictCode":"23"},{"CensusSubdivisionName":"Anmore","Type":"Village","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Barnston Island 3","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Belcarra","Type":"Village","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Bowen Island","Type":"Island municipality","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Burnaby","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Burrard Inlet 3","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Capilano 5","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Coquitlam","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Coquitlam 1","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Coquitlam 2","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Delta","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Katzie 1","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Katzie 2","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Langley - City","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Langley - District municipality","Type":"District municipality","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Lions Bay","Type":"Village","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Maple Ridge","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Matsqui 4","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"McMillan Island 6","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Metro Vancouver A","Type":"Regional district electoral area","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Mission 1","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Musqueam 2","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Musqueam 4","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"New Westminster","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"North Vancouver - City","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"North Vancouver - District municipality","Type":"District municipality","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Pitt Meadows","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Port Coquitlam","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Port Moody","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Richmond","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Semiahmoo","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Seymour Creek 2","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Surrey","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Tsawwassen","Type":"Tsawwassen Lands","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Vancouver","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"West Vancouver","Type":"District municipality","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"White Rock","Type":"City","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Whonnock 1","Type":"Indian reserve","RegionalDistrictCode":"11"},{"CensusSubdivisionName":"Babine 17","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Bulkley River 19","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Coryatsaqua (Moricetown) 2","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Dease Lake 9","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Gitanmaax 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Gitanyow 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Gitsegukla 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Gitwangak 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Guhthe Tah 12","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Hagwilget 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Hazelton","Type":"Village","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Iskut 6","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kispiox 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kitamaat 2","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kitasoo 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kitimat","Type":"District municipality","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kitimat-Stikine A","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kitimat-Stikine B","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kitimat-Stikine C (Part 1)","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kitimat-Stikine C (Part 2)","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kitimat-Stikine D","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kitimat-Stikine E","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kitimat-Stikine F","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kitselas 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kitsumkaylum 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kshish 4","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Kulspai 6","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Moricetown 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"New Hazelton","Type":"District municipality","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Nisga''a","Type":"Nisga''a land","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Sik-e-dakh 2","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Stewart","Type":"District municipality","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Tahltan 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Telegraph Creek","Type":"Indian reserve","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Terrace","Type":"City","RegionalDistrictCode":"25"},{"CensusSubdivisionName":"Fruitvale","Type":"Village","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Grand Forks","Type":"City","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Greenwood","Type":"City","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Kootenay Boundary A","Type":"Regional district electoral area","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Kootenay Boundary B / Lower Columbia-Old-Glory","Type":"Regional district electoral area","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Kootenay Boundary C / Christina Lake","Type":"Regional district electoral area","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Kootenay Boundary D / Rural Grand Forks","Type":"Regional district electoral area","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Kootenay Boundary E / West Boundary","Type":"Regional district electoral area","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Midway","Type":"Village","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Montrose","Type":"Village","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Rossland","Type":"City","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Trail","Type":"City","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Warfield","Type":"Village","RegionalDistrictCode":"21"},{"CensusSubdivisionName":"Alert Bay - Indian reserve","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Alert Bay - Village","Type":"Village","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Dead Point 5","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Fort Rupert 1","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Gwayasdums 1","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Hope Island 1","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Hopetown 10A","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Kippase 2","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Mount Waddington A","Type":"Regional district electoral area","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Mount Waddington B","Type":"Regional district electoral area","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Mount Waddington C","Type":"Regional district electoral area","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Mount Waddington D","Type":"Regional district electoral area","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Nimpkish 2","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Port Alice","Type":"Village","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Port Hardy","Type":"District municipality","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Port McNeill","Type":"Town","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Quaee 7","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Quatsino Subdivision 18","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Thomas Point 5","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Thomas Point 5A","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Tsulquate 4","Type":"Indian reserve","RegionalDistrictCode":"8"},{"CensusSubdivisionName":"Lantzville","Type":"District municipality","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Nanaimo","Type":"City","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Nanaimo A","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Nanaimo B","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Nanaimo C","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Nanaimo E","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Nanaimo F","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Nanaimo G","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Nanaimo H","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Nanaimo River","Type":"Indian reserve","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Nanaimo Town 1","Type":"Indian reserve","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Nanoose","Type":"Indian reserve","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Parksville","Type":"City","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Qualicum","Type":"Indian reserve","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Qualicum Beach","Type":"Town","RegionalDistrictCode":"3"},{"CensusSubdivisionName":"Armstrong","Type":"City","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"Coldstream","Type":"District municipality","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"Enderby","Type":"City","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"Enderby 2","Type":"Indian reserve","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"Harris 3","Type":"Indian reserve","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"Lumby","Type":"Village","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"North Okanagan B","Type":"Regional district electoral area","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"North Okanagan C","Type":"Regional district electoral area","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"North Okanagan D","Type":"Regional district electoral area","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"North Okanagan E","Type":"Regional district electoral area","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"North Okanagan F","Type":"Regional district electoral area","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"Okanagan (Part) 1 - North Okanagan","Type":"Indian reserve","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"Priest''s Valley 6","Type":"Indian reserve","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"Spallumcheen","Type":"District municipality","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"Vernon","Type":"City","RegionalDistrictCode":"17"},{"CensusSubdivisionName":"Fontas 1","Type":"Indian reserve","RegionalDistrictCode":"29"},{"CensusSubdivisionName":"Fort Nelson 2","Type":"Indian reserve","RegionalDistrictCode":"29"},{"CensusSubdivisionName":"Kahntah 3","Type":"Indian reserve","RegionalDistrictCode":"29"},{"CensusSubdivisionName":"Northern Rockies","Type":"Regional municipality","RegionalDistrictCode":"29"},{"CensusSubdivisionName":"Prophet River 4","Type":"Indian reserve","RegionalDistrictCode":"29"},{"CensusSubdivisionName":"Alexis 9","Type":"Indian reserve","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Ashnola 10","Type":"Indian reserve","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Blind Creek 6","Type":"Indian reserve","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Chopaka 7 & 8","Type":"Indian reserve","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Chuchuwayha 2","Type":"Indian reserve","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Keremeos","Type":"Village","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Lower Similkameen 2","Type":"Indian reserve","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Lulu 5","Type":"Indian reserve","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Okanagan-Similkameen A","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Okanagan-Similkameen B","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Okanagan-Similkameen C","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Okanagan-Similkameen D","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Okanagan-Similkameen E","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Okanagan-Similkameen F","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Okanagan-Similkameen G","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Okanagan-Similkameen H","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Okanagan-Similkameen I","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Oliver","Type":"Town","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Osoyoos","Type":"Town","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Osoyoos 1","Type":"Indian reserve","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Penticton","Type":"City","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Penticton 1","Type":"Indian reserve","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Princeton","Type":"Town","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Summerland","Type":"District municipality","RegionalDistrictCode":"14"},{"CensusSubdivisionName":"Blueberry River 205","Type":"Indian reserve","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Chetwynd","Type":"District municipality","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Dawson Creek","Type":"City","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Doig River 206","Type":"Indian reserve","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"East Moberly Lake 169","Type":"Indian reserve","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Finlay River 6","Type":"Indian reserve","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Fort St. John","Type":"City","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Fort Ware 1","Type":"Indian reserve","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Halfway River 168","Type":"Indian reserve","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Hudson''s Hope","Type":"District municipality","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Ingenika Point","Type":"Indian settlement","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Mesilinka 7","Type":"Indian reserve","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Peace River B","Type":"Regional district electoral area","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Peace River C","Type":"Regional district electoral area","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Peace River D","Type":"Regional district electoral area","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Peace River E","Type":"Regional district electoral area","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Pouce Coupe","Type":"Village","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Taylor","Type":"District municipality","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Tumbler Ridge","Type":"District municipality","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"West Moberly Lake 168A","Type":"Indian reserve","RegionalDistrictCode":"28"},{"CensusSubdivisionName":"Powell River","Type":"City","RegionalDistrictCode":"7"},{"CensusSubdivisionName":"qathet A","Type":"Regional district electoral area","RegionalDistrictCode":"7"},{"CensusSubdivisionName":"qathet B","Type":"Regional district electoral area","RegionalDistrictCode":"7"},{"CensusSubdivisionName":"qathet C","Type":"Regional district electoral area","RegionalDistrictCode":"7"},{"CensusSubdivisionName":"qathet D","Type":"Regional district electoral area","RegionalDistrictCode":"7"},{"CensusSubdivisionName":"qathet E","Type":"Regional district electoral area","RegionalDistrictCode":"7"},{"CensusSubdivisionName":"Sechelt (Part) - qathet","Type":"Indian government district","RegionalDistrictCode":"7"},{"CensusSubdivisionName":"Sliammon 1","Type":"Tla''amin Lands","RegionalDistrictCode":"7"},{"CensusSubdivisionName":"Dolphin Island 1","Type":"Indian reserve","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"Kulkayu (Hartley Bay) 4","Type":"Indian reserve","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"Kulkayu (Hartley Bay) 4A","Type":"Indian reserve","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"Lax Kw''alaams 1","Type":"Indian reserve","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"Masset","Type":"Village","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"Masset 1","Type":"Indian reserve","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"North Coast A","Type":"Regional district electoral area","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"North Coast C","Type":"Regional district electoral area","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"North Coast D","Type":"Regional district electoral area","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"North Coast E","Type":"Regional district electoral area","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"Port Clements","Type":"Village","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"Port Edward","Type":"District municipality","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"Prince Rupert","Type":"City","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"Queen Charlotte","Type":"Village","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"S1/2 Tsimpsean 2","Type":"Indian reserve","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"Skidegate 1","Type":"Indian reserve","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"Tlaa Gaa Aawtlaas 28","Type":"Indian reserve","RegionalDistrictCode":"24"},{"CensusSubdivisionName":"Bridge River 1","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Cayoosh Creek 1","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Cheakamus 11","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Chilhil 6","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Fountain 1","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Fountain 10","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Fountain 11","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Fountain 12","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Fountain 1B","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Fountain 1D","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Fountain 3","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Fountain 3A","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Fountain Creek 8","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Kowtain 17","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Lillooet","Type":"District municipality","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Lillooet 1","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"McCartney''s Flat 4","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Mission 5","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Mount Currie","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Necait 6","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Nequatque","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Nesikep 6","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Nesuch 3","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Pashilqua 2","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Pavilion 1","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Pemberton","Type":"Village","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Seaichem 16","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Seton Lake 5","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Slosh 1","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Squamish","Type":"District municipality","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Squamish-Lillooet A","Type":"Regional district electoral area","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Squamish-Lillooet B","Type":"Regional district electoral area","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Squamish-Lillooet C","Type":"Regional district electoral area","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Squamish-Lillooet D","Type":"Regional district electoral area","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Stawamus 24","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Towinock 2","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Waiwakum 14","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Whistler","Type":"District municipality","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Yekwaupsum 18","Type":"Indian reserve","RegionalDistrictCode":"13"},{"CensusSubdivisionName":"Dease River 1","Type":"Indian reserve","RegionalDistrictCode":"27"},{"CensusSubdivisionName":"Five Mile Point 3","Type":"Indian reserve","RegionalDistrictCode":"27"},{"CensusSubdivisionName":"Good Hope Lake","Type":"Indian settlement","RegionalDistrictCode":"27"},{"CensusSubdivisionName":"Liard River 3","Type":"Indian reserve","RegionalDistrictCode":"27"},{"CensusSubdivisionName":"Lower Post","Type":"Indian settlement","RegionalDistrictCode":"27"},{"CensusSubdivisionName":"Stikine Region","Type":"Regional district electoral area","RegionalDistrictCode":"27"},{"CensusSubdivisionName":"Unnamed 10","Type":"Indian reserve","RegionalDistrictCode":"27"},{"CensusSubdivisionName":"Ahaminaquus 12","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Campbell River","Type":"City","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Campbell River 11","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Cape Mudge 10","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Chenahkint 12","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Ehatis 11","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Gold River","Type":"Village","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Homalco 9","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Houpsitas 6","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Nenagwas 12","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Oclucje 7","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Quinsam 12","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Sayward","Type":"Village","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Squirrel Cove 8","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Strathcona A","Type":"Regional district electoral area","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Strathcona B","Type":"Regional district electoral area","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Strathcona C","Type":"Regional district electoral area","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Strathcona D (Oyster Bay - Buttle Lake)","Type":"Regional district electoral area","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Tahsis","Type":"Village","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Tork 7","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Tsa Xana 18","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Village Island 1","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Yuquot 1","Type":"Indian reserve","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Zeballos","Type":"Village","RegionalDistrictCode":"5"},{"CensusSubdivisionName":"Chekwelp 26","Type":"Indian reserve","RegionalDistrictCode":"12"},{"CensusSubdivisionName":"Gibsons","Type":"Town","RegionalDistrictCode":"12"},{"CensusSubdivisionName":"Sechelt","Type":"District municipality","RegionalDistrictCode":"12"},{"CensusSubdivisionName":"Sechelt (Part) - Sunshine Coast","Type":"Indian government district","RegionalDistrictCode":"12"},{"CensusSubdivisionName":"Sunshine Coast A","Type":"Regional district electoral area","RegionalDistrictCode":"12"},{"CensusSubdivisionName":"Sunshine Coast B","Type":"Regional district electoral area","RegionalDistrictCode":"12"},{"CensusSubdivisionName":"Sunshine Coast D","Type":"Regional district electoral area","RegionalDistrictCode":"12"},{"CensusSubdivisionName":"Sunshine Coast E","Type":"Regional district electoral area","RegionalDistrictCode":"12"},{"CensusSubdivisionName":"Sunshine Coast F","Type":"Regional district electoral area","RegionalDistrictCode":"12"},{"CensusSubdivisionName":"105 Mile Post 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Ashcroft","Type":"Village","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Ashcroft 4","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Barriere","Type":"District municipality","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Basque 18","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Bonaparte 3","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Boothroyd 8A","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Cache Creek","Type":"Village","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Canoe Creek 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Canoe Creek 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Chase","Type":"Village","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Chuchhraischin","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Clearwater","Type":"District municipality","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Clinton","Type":"Village","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Coldwater 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Douglas Lake 3","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Entlqwekkinh 19","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Halhalaeden","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Hamilton Creek 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"High Bar 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Inkluckcheen","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Inklyuhkinatko 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Joeyaska 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Kamloops","Type":"City","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Kamloops 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Kanaka Bar","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Kitzowit 20","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Klahkamich 17","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Kleetlekut 22","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Klickkumcheen 18","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Kloklowuck 7","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Kumcheen 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Logan Lake","Type":"District municipality","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Louis Creek 4","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Lower Hat Creek 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Lytton","Type":"Village","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Lytton 4A","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Lytton 4E","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Lytton 9A","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Lytton 9B","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Marble Canyon 3","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Merritt","Type":"City","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Nekalliston 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Nekliptum 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Neskonlith","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Nickel Palm 4","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Nickeyeah 25","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Nicola Lake 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Nicola Mameet 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Nicomen 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Nkaih 10","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Nohomeen 23","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Nooaitch 10","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"North Thompson 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Nuuautin 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Oregon Jack Creek 5","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Papyum 27","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Paska Island 3","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Paul''s Basin 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Pemynoos 9","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Peq-Paq 22","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Sahhaltkum 4","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Seah 5","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Shackan 11","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Shawniken 4B","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Siska Flat","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Skeetchestn","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Skuppah 2A","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Skuppah 4","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Skwayaynope 26","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Spences Bridge","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Spintlum Flat 3","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Squaam 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Stequmwhulpa 5","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Stryen 9","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Sun Peaks Mountain","Type":"Village","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Thompson-Nicola A (Wells Gray Country)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Thompson-Nicola B (Thompson Headwaters)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Thompson-Nicola E (Bonaparte Plateau)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Thompson-Nicola I (Blue Sky Country)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Thompson-Nicola J (Copper Desert Country)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Thompson-Nicola L (Grasslands)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Thompson-Nicola M (Beautiful Nicola Valley - North)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Thompson-Nicola N (Beautiful Nicola Valley - South)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Thompson-Nicola O (Lower North Thompson)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Thompson-Nicola P (Rivers and the Peaks)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Tsaukan 12","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Twoyqhalsht 16","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Upper Hat Creek 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Upper Nepa 6","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Whispering Pines 4","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Yawaucht 11","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Zacht 5","Type":"Indian reserve","RegionalDistrictCode":"15"},{"CensusSubdivisionName":"Zoht 4","Type":"Indian reserve","RegionalDistrictCode":"15"}]';
-BEGIN
- -- Insert into "CensusSubdivisions" table
- INSERT INTO public."CensusSubdivisions"
- ("Id", "CensusSubdivisionName", "Type","RegionalDistrictCode", "ExtraProperties", "ConcurrencyStamp", "CreationTime")
- SELECT
- gen_random_uuid(),
- data->>'CensusSubdivisionName',
- data->>'Type',
- data->>'RegionalDistrictCode',
- '',
- '',
- pg_catalog.now()
- FROM jsonb_array_elements(json_data::jsonb) AS data;
-
-END $$;
diff --git a/database/scripts/unitydb-communities-script.sql b/database/scripts/unitydb-communities-script.sql
index 617be7f97..0f0d27b3a 100644
--- a/database/scripts/unitydb-communities-script.sql
+++ b/database/scripts/unitydb-communities-script.sql
@@ -1,7 +1,10 @@
-DO $$
+DO $$
DECLARE
- json_data jsonb := '[{"Name":"Ahahswinis 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Alberni 2","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Alberni-Clayoquot A","Type":"Regional district electoral area","RegionalDistrictCode":"4"},{"Name":"Alberni-Clayoquot B","Type":"Regional district electoral area","RegionalDistrictCode":"4"},{"Name":"Alberni-Clayoquot C","Type":"Regional district electoral area","RegionalDistrictCode":"4"},{"Name":"Alberni-Clayoquot D","Type":"Regional district electoral area","RegionalDistrictCode":"4"},{"Name":"Alberni-Clayoquot E","Type":"Regional district electoral area","RegionalDistrictCode":"4"},{"Name":"Alberni-Clayoquot F","Type":"Regional district electoral area","RegionalDistrictCode":"4"},{"Name":"Anacla 12","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Clakamucus 2","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Elhlateese 2","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Esowista 3","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Hesquiat 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Ittatsoo 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Klehkoot 2","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Macoah 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Marktosis 15","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Numukamis 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Opitsat 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Port Alberni","Type":"City","RegionalDistrictCode":"4"},{"Name":"Refuge Cove 6","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Sachsa 4","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Tin Wis 11","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Tofino","Type":"District municipality","RegionalDistrictCode":"4"},{"Name":"Tsahaheh 1","Type":"Indian reserve","RegionalDistrictCode":"4"},{"Name":"Ucluelet","Type":"District municipality","RegionalDistrictCode":"4"},{"Name":"Babine 16","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Babine 25","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Babine 6","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Babine Lake 21B","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Binche 2","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Bulkley-Nechako A","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"Name":"Bulkley-Nechako B","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"Name":"Bulkley-Nechako C","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"Name":"Bulkley-Nechako D","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"Name":"Bulkley-Nechako E","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"Name":"Bulkley-Nechako F","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"Name":"Bulkley-Nechako G","Type":"Regional district electoral area","RegionalDistrictCode":"26"},{"Name":"Burns Lake","Type":"Village","RegionalDistrictCode":"26"},{"Name":"Burns Lake 18","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Cheslatta 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Duncan Lake 2","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Dzitline Lee 9","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Fort St. James","Type":"District municipality","RegionalDistrictCode":"26"},{"Name":"Francois Lake 7","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Fraser Lake","Type":"Village","RegionalDistrictCode":"26"},{"Name":"Granisle","Type":"Village","RegionalDistrictCode":"26"},{"Name":"Houston","Type":"District municipality","RegionalDistrictCode":"26"},{"Name":"Jean Baptiste 28","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Laketown 3","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Mission Lands 17","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Nak''azdli","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Nautley (Fort Fraser) 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Nedoats 11","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Noonla 6","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"North Tacla Lake","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Omineca 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Palling 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Poison Creek 17A","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Seaspunkut 4","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Skins Lake 16A","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Skins Lake 16B","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Smithers","Type":"Town","RegionalDistrictCode":"26"},{"Name":"Sowchea 3","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Stellaquo (Stella) 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Stony Creek 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Tache 1","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Tacla Lake (Ferry Landing) 9","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Tadinlay 15","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Tatla West 11","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Tatla''t East 2","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Telkwa","Type":"Village","RegionalDistrictCode":"26"},{"Name":"Uncha Lake 13A","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Vanderhoof","Type":"District municipality","RegionalDistrictCode":"26"},{"Name":"Williams Prairie Meadow 1A","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Woyenne 27","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Ye Koo Che 3","Type":"Indian reserve","RegionalDistrictCode":"26"},{"Name":"Becher Bay 1","Type":"Indian reserve","RegionalDistrictCode":"1"},{"Name":"Central Saanich","Type":"District municipality","RegionalDistrictCode":"1"},{"Name":"Cole Bay 3","Type":"Indian reserve","RegionalDistrictCode":"1"},{"Name":"Colwood","Type":"City","RegionalDistrictCode":"1"},{"Name":"East Saanich 2","Type":"Indian reserve","RegionalDistrictCode":"1"},{"Name":"Esquimalt - District municipality","Type":"District municipality","RegionalDistrictCode":"1"},{"Name":"Esquimalt - Indian reserve","Type":"Indian reserve","RegionalDistrictCode":"1"},{"Name":"Galiano Island 9","Type":"Indian reserve","RegionalDistrictCode":"1"},{"Name":"Gordon River 2","Type":"Indian reserve","RegionalDistrictCode":"1"},{"Name":"Highlands","Type":"District municipality","RegionalDistrictCode":"1"},{"Name":"Juan de Fuca (Part 1)","Type":"Regional district electoral area","RegionalDistrictCode":"1"},{"Name":"Juan de Fuca (Part 2)","Type":"Regional district electoral area","RegionalDistrictCode":"1"},{"Name":"Langford","Type":"City","RegionalDistrictCode":"1"},{"Name":"Metchosin","Type":"District municipality","RegionalDistrictCode":"1"},{"Name":"New Songhees 1A","Type":"Indian reserve","RegionalDistrictCode":"1"},{"Name":"North Saanich","Type":"District municipality","RegionalDistrictCode":"1"},{"Name":"Oak Bay","Type":"District municipality","RegionalDistrictCode":"1"},{"Name":"Saanich","Type":"District municipality","RegionalDistrictCode":"1"},{"Name":"Saltspring Island","Type":"Regional district electoral area","RegionalDistrictCode":"1"},{"Name":"Sidney","Type":"Town","RegionalDistrictCode":"1"},{"Name":"Sooke","Type":"District municipality","RegionalDistrictCode":"1"},{"Name":"South Saanich 1","Type":"Indian reserve","RegionalDistrictCode":"1"},{"Name":"Southern Gulf Islands","Type":"Regional district electoral area","RegionalDistrictCode":"1"},{"Name":"T''Sou-ke","Type":"Indian reserve","RegionalDistrictCode":"1"},{"Name":"Union Bay 4","Type":"Indian reserve","RegionalDistrictCode":"1"},{"Name":"Victoria","Type":"City","RegionalDistrictCode":"1"},{"Name":"View Royal","Type":"Town","RegionalDistrictCode":"1"},{"Name":"Agats Meadow 8","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Alexandria","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Alexis Creek 14","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Alexis Creek 16","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Alexis Creek 21","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Alexis Creek 34","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Alkali Lake 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Alkali Lake 4A","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Anahim''s Flat 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Anahim''s Meadow","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Baezaeko River 27","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Baptiste Meadow 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Betty Creek 18","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Canim Lake 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Canim Lake 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Canim Lake 4","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Canoe Creek 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Cariboo A","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"Name":"Cariboo B","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"Name":"Cariboo C","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"Name":"Cariboo D","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"Name":"Cariboo E","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"Name":"Cariboo F","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"Name":"Cariboo G","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"Name":"Cariboo H","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"Name":"Cariboo I","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"Name":"Cariboo J","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"Name":"Cariboo K","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"Name":"Cariboo L","Type":"Regional district electoral area","RegionalDistrictCode":"22"},{"Name":"Charley Boy''s Meadow 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Chilco Lake 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Chilco Lake 1A","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Coglistiko River 29","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Deep Creek 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Dog Creek 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Dog Creek 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Dragon Lake 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Euchinico Creek 17","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Fishtrap 19","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Garden","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Johny Sticks 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Kluskus 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Lezbye 6","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Little Springs","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Lohbiee 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Michel Gardens 36","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Nazco 20","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"One Hundred Mile House","Type":"District municipality","RegionalDistrictCode":"22"},{"Name":"Puntzi Lake 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Quesnel","Type":"City","RegionalDistrictCode":"22"},{"Name":"Quesnel 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Redstone Flat 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Salmon River Meadow 7","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Sandy Harry 4","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Soda Creek 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Squinas 2","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Stone 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Sundayman''s Meadow 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Swan Lake 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Tanakut 4","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Thomas Squinas Ranch 2A","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Toosey 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Towdystan Lake 3","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Trout Lake Alec 16","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Ulkatcho 13","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Ulkatcho 14A","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Wells","Type":"District municipality","RegionalDistrictCode":"22"},{"Name":"Williams Lake","Type":"City","RegionalDistrictCode":"22"},{"Name":"Williams Lake 1","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Windy Mouth 7","Type":"Indian reserve","RegionalDistrictCode":"22"},{"Name":"Bella Bella 1","Type":"Indian reserve","RegionalDistrictCode":"9"},{"Name":"Bella Coola 1","Type":"Indian reserve","RegionalDistrictCode":"9"},{"Name":"Central Coast A","Type":"Regional district electoral area","RegionalDistrictCode":"9"},{"Name":"Central Coast C","Type":"Regional district electoral area","RegionalDistrictCode":"9"},{"Name":"Central Coast D","Type":"Regional district electoral area","RegionalDistrictCode":"9"},{"Name":"Central Coast E","Type":"Regional district electoral area","RegionalDistrictCode":"9"},{"Name":"Katit 1","Type":"Indian reserve","RegionalDistrictCode":"9"},{"Name":"Castlegar","Type":"City","RegionalDistrictCode":"20"},{"Name":"Central Kootenay A","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"Name":"Central Kootenay B","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"Name":"Central Kootenay C","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"Name":"Central Kootenay D","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"Name":"Central Kootenay E","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"Name":"Central Kootenay F","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"Name":"Central Kootenay G","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"Name":"Central Kootenay H","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"Name":"Central Kootenay I","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"Name":"Central Kootenay J","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"Name":"Central Kootenay K","Type":"Regional district electoral area","RegionalDistrictCode":"20"},{"Name":"Creston","Type":"Town","RegionalDistrictCode":"20"},{"Name":"Creston 1","Type":"Indian reserve","RegionalDistrictCode":"20"},{"Name":"Kaslo","Type":"Village","RegionalDistrictCode":"20"},{"Name":"Nakusp","Type":"Village","RegionalDistrictCode":"20"},{"Name":"Nelson","Type":"City","RegionalDistrictCode":"20"},{"Name":"New Denver","Type":"Village","RegionalDistrictCode":"20"},{"Name":"Salmo","Type":"Village","RegionalDistrictCode":"20"},{"Name":"Silverton","Type":"Village","RegionalDistrictCode":"20"},{"Name":"Slocan","Type":"Village","RegionalDistrictCode":"20"},{"Name":"Central Okanagan","Type":"Regional district electoral area","RegionalDistrictCode":"16"},{"Name":"Central Okanagan West","Type":"Regional district electoral area","RegionalDistrictCode":"16"},{"Name":"Duck Lake 7","Type":"Indian reserve","RegionalDistrictCode":"16"},{"Name":"Kelowna","Type":"City","RegionalDistrictCode":"16"},{"Name":"Lake Country","Type":"District municipality","RegionalDistrictCode":"16"},{"Name":"Peachland","Type":"District municipality","RegionalDistrictCode":"16"},{"Name":"Tsinstikeptum 10","Type":"Indian reserve","RegionalDistrictCode":"16"},{"Name":"Tsinstikeptum 9","Type":"Indian reserve","RegionalDistrictCode":"16"},{"Name":"West Kelowna","Type":"City","RegionalDistrictCode":"16"},{"Name":"Chum Creek 2","Type":"Indian reserve","RegionalDistrictCode":"18"},{"Name":"Columbia-Shuswap A","Type":"Regional district electoral area","RegionalDistrictCode":"18"},{"Name":"Columbia-Shuswap B","Type":"Regional district electoral area","RegionalDistrictCode":"18"},{"Name":"Columbia-Shuswap C","Type":"Regional district electoral area","RegionalDistrictCode":"18"},{"Name":"Columbia-Shuswap D","Type":"Regional district electoral area","RegionalDistrictCode":"18"},{"Name":"Columbia-Shuswap E","Type":"Regional district electoral area","RegionalDistrictCode":"18"},{"Name":"Columbia-Shuswap F","Type":"Regional district electoral area","RegionalDistrictCode":"18"},{"Name":"Golden","Type":"Town","RegionalDistrictCode":"18"},{"Name":"Hustalen 1","Type":"Indian reserve","RegionalDistrictCode":"18"},{"Name":"North Bay 5","Type":"Indian reserve","RegionalDistrictCode":"18"},{"Name":"Okanagan (Part) 1 - Thompson/Okanagan","Type":"Indian reserve","RegionalDistrictCode":"18"},{"Name":"Quaaout 1","Type":"Indian reserve","RegionalDistrictCode":"18"},{"Name":"Revelstoke","Type":"City","RegionalDistrictCode":"18"},{"Name":"Salmon Arm","Type":"City","RegionalDistrictCode":"18"},{"Name":"Salmon River 1","Type":"Indian reserve","RegionalDistrictCode":"18"},{"Name":"Scotch Creek 4","Type":"Indian reserve","RegionalDistrictCode":"18"},{"Name":"Sicamous","Type":"District municipality","RegionalDistrictCode":"18"},{"Name":"Switsemalph","Type":"Indian reserve","RegionalDistrictCode":"18"},{"Name":"Switsemalph 3","Type":"Indian reserve","RegionalDistrictCode":"18"},{"Name":"Comox","Type":"Town","RegionalDistrictCode":"6"},{"Name":"Comox 1","Type":"Indian reserve","RegionalDistrictCode":"6"},{"Name":"Comox Valley A","Type":"Regional district electoral area","RegionalDistrictCode":"6"},{"Name":"Comox Valley B (Lazo North)","Type":"Regional district electoral area","RegionalDistrictCode":"6"},{"Name":"Comox Valley C (Puntledge - Black Creek)","Type":"Regional district electoral area","RegionalDistrictCode":"6"},{"Name":"Courtenay","Type":"City","RegionalDistrictCode":"6"},{"Name":"Cumberland","Type":"Village","RegionalDistrictCode":"6"},{"Name":"Pentledge 2","Type":"Indian reserve","RegionalDistrictCode":"6"},{"Name":"Chemainus 13","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Cowichan","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Cowichan Lake","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Cowichan Valley A","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"Name":"Cowichan Valley B","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"Name":"Cowichan Valley C","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"Name":"Cowichan Valley D","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"Name":"Cowichan Valley E","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"Name":"Cowichan Valley F","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"Name":"Cowichan Valley G","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"Name":"Cowichan Valley H","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"Name":"Cowichan Valley I","Type":"Regional district electoral area","RegionalDistrictCode":"2"},{"Name":"Duncan","Type":"City","RegionalDistrictCode":"2"},{"Name":"Est-Patrolas 4","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Halalt 2","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Kil-pah-las 3","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Ladysmith","Type":"Town","RegionalDistrictCode":"2"},{"Name":"Lake Cowichan","Type":"Town","RegionalDistrictCode":"2"},{"Name":"Lyacksun 3","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Malachan 11","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Malahat 11","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"North Cowichan","Type":"District municipality","RegionalDistrictCode":"2"},{"Name":"Oyster Bay 12","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Penelakut Island 7","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Portier Pass 5","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Shingle Point 4","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Squaw-Hay-One 11","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Theik 2","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Tsussie 6","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Tzart-Lam 5","Type":"Indian reserve","RegionalDistrictCode":"2"},{"Name":"Canal Flats","Type":"Village","RegionalDistrictCode":"19"},{"Name":"Cassimayooks (Mayook) 5","Type":"Indian reserve","RegionalDistrictCode":"19"},{"Name":"Columbia Lake 3","Type":"Indian reserve","RegionalDistrictCode":"19"},{"Name":"Cranbrook","Type":"City","RegionalDistrictCode":"19"},{"Name":"East Kootenay A","Type":"Regional district electoral area","RegionalDistrictCode":"19"},{"Name":"East Kootenay B","Type":"Regional district electoral area","RegionalDistrictCode":"19"},{"Name":"East Kootenay C","Type":"Regional district electoral area","RegionalDistrictCode":"19"},{"Name":"East Kootenay E","Type":"Regional district electoral area","RegionalDistrictCode":"19"},{"Name":"East Kootenay F","Type":"Regional district electoral area","RegionalDistrictCode":"19"},{"Name":"East Kootenay G","Type":"Regional district electoral area","RegionalDistrictCode":"19"},{"Name":"Elkford","Type":"District municipality","RegionalDistrictCode":"19"},{"Name":"Fernie","Type":"City","RegionalDistrictCode":"19"},{"Name":"Invermere","Type":"District municipality","RegionalDistrictCode":"19"},{"Name":"Isidore''s Ranch 4","Type":"Indian reserve","RegionalDistrictCode":"19"},{"Name":"Kimberley","Type":"City","RegionalDistrictCode":"19"},{"Name":"Kootenay 1","Type":"Indian reserve","RegionalDistrictCode":"19"},{"Name":"Radium Hot Springs","Type":"Village","RegionalDistrictCode":"19"},{"Name":"Shuswap","Type":"Indian reserve","RegionalDistrictCode":"19"},{"Name":"Sparwood","Type":"District municipality","RegionalDistrictCode":"19"},{"Name":"St. Mary''s","Type":"Indian reserve","RegionalDistrictCode":"19"},{"Name":"Tobacco Plains 2","Type":"Indian reserve","RegionalDistrictCode":"19"},{"Name":"Abbotsford","Type":"City","RegionalDistrictCode":"10"},{"Name":"Aitchelitch 9","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Albert Flat 5","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Boothroyd 13","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Boston Bar 1A","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Bucktum 4","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Chawathil 4","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Cheam 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Chehalis 5","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Chilliwack","Type":"City","RegionalDistrictCode":"10"},{"Name":"Douglas 8","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Fraser Valley A","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"Name":"Fraser Valley B","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"Name":"Fraser Valley C","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"Name":"Fraser Valley D","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"Name":"Fraser Valley E","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"Name":"Fraser Valley F","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"Name":"Fraser Valley G","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"Name":"Fraser Valley H","Type":"Regional district electoral area","RegionalDistrictCode":"10"},{"Name":"Harrison Hot Springs","Type":"Village","RegionalDistrictCode":"10"},{"Name":"Holachten 8","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Hope","Type":"District municipality","RegionalDistrictCode":"10"},{"Name":"Inkahtsaph 6","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Kahmoose 4","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Kent","Type":"District municipality","RegionalDistrictCode":"10"},{"Name":"Kopchitchin 2","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Kwawkwawapilt 6","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Lakahahmen 11","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Langley 2","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Lukseetsissum 9","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Matsqui Main 2","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Mission","Type":"District municipality","RegionalDistrictCode":"10"},{"Name":"Ohamil 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Paqulh","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Peters 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Popkum 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Puckatholetchin 11","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Q''alatkú7em","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Ruby Creek 2","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Sachteen","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Saddle Rock 9","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Schelowat 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Schkam 2","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Scowlitz 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Seabird Island","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Skawahlook 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Skookumchuck 4","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Skowkale","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Skwah 4","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Skwali 3","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Skway 5","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Skweahm 10","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Soowahlie 14","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Speyum 3","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Spuzzum 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Squawkum Creek 3","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Squiaala","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Stullawheets 8","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Tipella 7","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Tseatah 2","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Tuckkwiowhum 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Tzeachten 13","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Upper Sumas 6","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Yakweakwioose 12","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Yale Town 1","Type":"Indian reserve","RegionalDistrictCode":"10"},{"Name":"Fort George 2","Type":"Indian reserve","RegionalDistrictCode":"23"},{"Name":"Fraser-Fort George A","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"Name":"Fraser-Fort George C","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"Name":"Fraser-Fort George D","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"Name":"Fraser-Fort George E","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"Name":"Fraser-Fort George F","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"Name":"Fraser-Fort George G","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"Name":"Fraser-Fort George H","Type":"Regional district electoral area","RegionalDistrictCode":"23"},{"Name":"Mackenzie","Type":"District municipality","RegionalDistrictCode":"23"},{"Name":"McBride","Type":"Village","RegionalDistrictCode":"23"},{"Name":"McLeod Lake 1","Type":"Indian reserve","RegionalDistrictCode":"23"},{"Name":"Prince George","Type":"City","RegionalDistrictCode":"23"},{"Name":"Valemount","Type":"Village","RegionalDistrictCode":"23"},{"Name":"Anmore","Type":"Village","RegionalDistrictCode":"11"},{"Name":"Barnston Island 3","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Belcarra","Type":"Village","RegionalDistrictCode":"11"},{"Name":"Bowen Island","Type":"Island municipality","RegionalDistrictCode":"11"},{"Name":"Burnaby","Type":"City","RegionalDistrictCode":"11"},{"Name":"Burrard Inlet 3","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Capilano 5","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Coquitlam","Type":"City","RegionalDistrictCode":"11"},{"Name":"Coquitlam 1","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Coquitlam 2","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Delta","Type":"City","RegionalDistrictCode":"11"},{"Name":"Katzie 1","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Katzie 2","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Langley - City","Type":"City","RegionalDistrictCode":"11"},{"Name":"Langley - District municipality","Type":"District municipality","RegionalDistrictCode":"11"},{"Name":"Lions Bay","Type":"Village","RegionalDistrictCode":"11"},{"Name":"Maple Ridge","Type":"City","RegionalDistrictCode":"11"},{"Name":"Matsqui 4","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"McMillan Island 6","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Metro Vancouver A","Type":"Regional district electoral area","RegionalDistrictCode":"11"},{"Name":"Mission 1","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Musqueam 2","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Musqueam 4","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"New Westminster","Type":"City","RegionalDistrictCode":"11"},{"Name":"North Vancouver - City","Type":"City","RegionalDistrictCode":"11"},{"Name":"North Vancouver - District municipality","Type":"District municipality","RegionalDistrictCode":"11"},{"Name":"Pitt Meadows","Type":"City","RegionalDistrictCode":"11"},{"Name":"Port Coquitlam","Type":"City","RegionalDistrictCode":"11"},{"Name":"Port Moody","Type":"City","RegionalDistrictCode":"11"},{"Name":"Richmond","Type":"City","RegionalDistrictCode":"11"},{"Name":"Semiahmoo","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Seymour Creek 2","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Surrey","Type":"City","RegionalDistrictCode":"11"},{"Name":"Tsawwassen","Type":"Tsawwassen Lands","RegionalDistrictCode":"11"},{"Name":"Vancouver","Type":"City","RegionalDistrictCode":"11"},{"Name":"West Vancouver","Type":"District municipality","RegionalDistrictCode":"11"},{"Name":"White Rock","Type":"City","RegionalDistrictCode":"11"},{"Name":"Whonnock 1","Type":"Indian reserve","RegionalDistrictCode":"11"},{"Name":"Babine 17","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Bulkley River 19","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Coryatsaqua (Moricetown) 2","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Dease Lake 9","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Gitanmaax 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Gitanyow 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Gitsegukla 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Gitwangak 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Guhthe Tah 12","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Hagwilget 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Hazelton","Type":"Village","RegionalDistrictCode":"25"},{"Name":"Iskut 6","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Kispiox 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Kitamaat 2","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Kitasoo 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Kitimat","Type":"District municipality","RegionalDistrictCode":"25"},{"Name":"Kitimat-Stikine A","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"Name":"Kitimat-Stikine B","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"Name":"Kitimat-Stikine C (Part 1)","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"Name":"Kitimat-Stikine C (Part 2)","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"Name":"Kitimat-Stikine D","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"Name":"Kitimat-Stikine E","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"Name":"Kitimat-Stikine F","Type":"Regional district electoral area","RegionalDistrictCode":"25"},{"Name":"Kitselas 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Kitsumkaylum 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Kshish 4","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Kulspai 6","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Moricetown 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"New Hazelton","Type":"District municipality","RegionalDistrictCode":"25"},{"Name":"Nisga''a","Type":"Nisga''a land","RegionalDistrictCode":"25"},{"Name":"Sik-e-dakh 2","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Stewart","Type":"District municipality","RegionalDistrictCode":"25"},{"Name":"Tahltan 1","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Telegraph Creek","Type":"Indian reserve","RegionalDistrictCode":"25"},{"Name":"Terrace","Type":"City","RegionalDistrictCode":"25"},{"Name":"Fruitvale","Type":"Village","RegionalDistrictCode":"21"},{"Name":"Grand Forks","Type":"City","RegionalDistrictCode":"21"},{"Name":"Greenwood","Type":"City","RegionalDistrictCode":"21"},{"Name":"Kootenay Boundary A","Type":"Regional district electoral area","RegionalDistrictCode":"21"},{"Name":"Kootenay Boundary B / Lower Columbia-Old-Glory","Type":"Regional district electoral area","RegionalDistrictCode":"21"},{"Name":"Kootenay Boundary C / Christina Lake","Type":"Regional district electoral area","RegionalDistrictCode":"21"},{"Name":"Kootenay Boundary D / Rural Grand Forks","Type":"Regional district electoral area","RegionalDistrictCode":"21"},{"Name":"Kootenay Boundary E / West Boundary","Type":"Regional district electoral area","RegionalDistrictCode":"21"},{"Name":"Midway","Type":"Village","RegionalDistrictCode":"21"},{"Name":"Montrose","Type":"Village","RegionalDistrictCode":"21"},{"Name":"Rossland","Type":"City","RegionalDistrictCode":"21"},{"Name":"Trail","Type":"City","RegionalDistrictCode":"21"},{"Name":"Warfield","Type":"Village","RegionalDistrictCode":"21"},{"Name":"Alert Bay - Indian reserve","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Alert Bay - Village","Type":"Village","RegionalDistrictCode":"8"},{"Name":"Dead Point 5","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Fort Rupert 1","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Gwayasdums 1","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Hope Island 1","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Hopetown 10A","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Kippase 2","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Mount Waddington A","Type":"Regional district electoral area","RegionalDistrictCode":"8"},{"Name":"Mount Waddington B","Type":"Regional district electoral area","RegionalDistrictCode":"8"},{"Name":"Mount Waddington C","Type":"Regional district electoral area","RegionalDistrictCode":"8"},{"Name":"Mount Waddington D","Type":"Regional district electoral area","RegionalDistrictCode":"8"},{"Name":"Nimpkish 2","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Port Alice","Type":"Village","RegionalDistrictCode":"8"},{"Name":"Port Hardy","Type":"District municipality","RegionalDistrictCode":"8"},{"Name":"Port McNeill","Type":"Town","RegionalDistrictCode":"8"},{"Name":"Quaee 7","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Quatsino Subdivision 18","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Thomas Point 5","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Thomas Point 5A","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Tsulquate 4","Type":"Indian reserve","RegionalDistrictCode":"8"},{"Name":"Lantzville","Type":"District municipality","RegionalDistrictCode":"3"},{"Name":"Nanaimo","Type":"City","RegionalDistrictCode":"3"},{"Name":"Nanaimo A","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"Name":"Nanaimo B","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"Name":"Nanaimo C","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"Name":"Nanaimo E","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"Name":"Nanaimo F","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"Name":"Nanaimo G","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"Name":"Nanaimo H","Type":"Regional district electoral area","RegionalDistrictCode":"3"},{"Name":"Nanaimo River","Type":"Indian reserve","RegionalDistrictCode":"3"},{"Name":"Nanaimo Town 1","Type":"Indian reserve","RegionalDistrictCode":"3"},{"Name":"Nanoose","Type":"Indian reserve","RegionalDistrictCode":"3"},{"Name":"Parksville","Type":"City","RegionalDistrictCode":"3"},{"Name":"Qualicum","Type":"Indian reserve","RegionalDistrictCode":"3"},{"Name":"Qualicum Beach","Type":"Town","RegionalDistrictCode":"3"},{"Name":"Armstrong","Type":"City","RegionalDistrictCode":"17"},{"Name":"Coldstream","Type":"District municipality","RegionalDistrictCode":"17"},{"Name":"Enderby","Type":"City","RegionalDistrictCode":"17"},{"Name":"Enderby 2","Type":"Indian reserve","RegionalDistrictCode":"17"},{"Name":"Harris 3","Type":"Indian reserve","RegionalDistrictCode":"17"},{"Name":"Lumby","Type":"Village","RegionalDistrictCode":"17"},{"Name":"North Okanagan B","Type":"Regional district electoral area","RegionalDistrictCode":"17"},{"Name":"North Okanagan C","Type":"Regional district electoral area","RegionalDistrictCode":"17"},{"Name":"North Okanagan D","Type":"Regional district electoral area","RegionalDistrictCode":"17"},{"Name":"North Okanagan E","Type":"Regional district electoral area","RegionalDistrictCode":"17"},{"Name":"North Okanagan F","Type":"Regional district electoral area","RegionalDistrictCode":"17"},{"Name":"Okanagan (Part) 1 - North Okanagan","Type":"Indian reserve","RegionalDistrictCode":"17"},{"Name":"Priest''s Valley 6","Type":"Indian reserve","RegionalDistrictCode":"17"},{"Name":"Spallumcheen","Type":"District municipality","RegionalDistrictCode":"17"},{"Name":"Vernon","Type":"City","RegionalDistrictCode":"17"},{"Name":"Fontas 1","Type":"Indian reserve","RegionalDistrictCode":"29"},{"Name":"Fort Nelson 2","Type":"Indian reserve","RegionalDistrictCode":"29"},{"Name":"Kahntah 3","Type":"Indian reserve","RegionalDistrictCode":"29"},{"Name":"Northern Rockies","Type":"Regional municipality","RegionalDistrictCode":"29"},{"Name":"Prophet River 4","Type":"Indian reserve","RegionalDistrictCode":"29"},{"Name":"Alexis 9","Type":"Indian reserve","RegionalDistrictCode":"14"},{"Name":"Ashnola 10","Type":"Indian reserve","RegionalDistrictCode":"14"},{"Name":"Blind Creek 6","Type":"Indian reserve","RegionalDistrictCode":"14"},{"Name":"Chopaka 7 & 8","Type":"Indian reserve","RegionalDistrictCode":"14"},{"Name":"Chuchuwayha 2","Type":"Indian reserve","RegionalDistrictCode":"14"},{"Name":"Keremeos","Type":"Village","RegionalDistrictCode":"14"},{"Name":"Lower Similkameen 2","Type":"Indian reserve","RegionalDistrictCode":"14"},{"Name":"Lulu 5","Type":"Indian reserve","RegionalDistrictCode":"14"},{"Name":"Okanagan-Similkameen A","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"Name":"Okanagan-Similkameen B","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"Name":"Okanagan-Similkameen C","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"Name":"Okanagan-Similkameen D","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"Name":"Okanagan-Similkameen E","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"Name":"Okanagan-Similkameen F","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"Name":"Okanagan-Similkameen G","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"Name":"Okanagan-Similkameen H","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"Name":"Okanagan-Similkameen I","Type":"Regional district electoral area","RegionalDistrictCode":"14"},{"Name":"Oliver","Type":"Town","RegionalDistrictCode":"14"},{"Name":"Osoyoos","Type":"Town","RegionalDistrictCode":"14"},{"Name":"Osoyoos 1","Type":"Indian reserve","RegionalDistrictCode":"14"},{"Name":"Penticton","Type":"City","RegionalDistrictCode":"14"},{"Name":"Penticton 1","Type":"Indian reserve","RegionalDistrictCode":"14"},{"Name":"Princeton","Type":"Town","RegionalDistrictCode":"14"},{"Name":"Summerland","Type":"District municipality","RegionalDistrictCode":"14"},{"Name":"Blueberry River 205","Type":"Indian reserve","RegionalDistrictCode":"28"},{"Name":"Chetwynd","Type":"District municipality","RegionalDistrictCode":"28"},{"Name":"Dawson Creek","Type":"City","RegionalDistrictCode":"28"},{"Name":"Doig River 206","Type":"Indian reserve","RegionalDistrictCode":"28"},{"Name":"East Moberly Lake 169","Type":"Indian reserve","RegionalDistrictCode":"28"},{"Name":"Finlay River 6","Type":"Indian reserve","RegionalDistrictCode":"28"},{"Name":"Fort St. John","Type":"City","RegionalDistrictCode":"28"},{"Name":"Fort Ware 1","Type":"Indian reserve","RegionalDistrictCode":"28"},{"Name":"Halfway River 168","Type":"Indian reserve","RegionalDistrictCode":"28"},{"Name":"Hudson''s Hope","Type":"District municipality","RegionalDistrictCode":"28"},{"Name":"Ingenika Point","Type":"Indian settlement","RegionalDistrictCode":"28"},{"Name":"Mesilinka 7","Type":"Indian reserve","RegionalDistrictCode":"28"},{"Name":"Peace River B","Type":"Regional district electoral area","RegionalDistrictCode":"28"},{"Name":"Peace River C","Type":"Regional district electoral area","RegionalDistrictCode":"28"},{"Name":"Peace River D","Type":"Regional district electoral area","RegionalDistrictCode":"28"},{"Name":"Peace River E","Type":"Regional district electoral area","RegionalDistrictCode":"28"},{"Name":"Pouce Coupe","Type":"Village","RegionalDistrictCode":"28"},{"Name":"Taylor","Type":"District municipality","RegionalDistrictCode":"28"},{"Name":"Tumbler Ridge","Type":"District municipality","RegionalDistrictCode":"28"},{"Name":"West Moberly Lake 168A","Type":"Indian reserve","RegionalDistrictCode":"28"},{"Name":"Powell River","Type":"City","RegionalDistrictCode":"7"},{"Name":"qathet A","Type":"Regional district electoral area","RegionalDistrictCode":"7"},{"Name":"qathet B","Type":"Regional district electoral area","RegionalDistrictCode":"7"},{"Name":"qathet C","Type":"Regional district electoral area","RegionalDistrictCode":"7"},{"Name":"qathet D","Type":"Regional district electoral area","RegionalDistrictCode":"7"},{"Name":"qathet E","Type":"Regional district electoral area","RegionalDistrictCode":"7"},{"Name":"Sechelt (Part) - qathet","Type":"Indian government district","RegionalDistrictCode":"7"},{"Name":"Sliammon 1","Type":"Tla''amin Lands","RegionalDistrictCode":"7"},{"Name":"Dolphin Island 1","Type":"Indian reserve","RegionalDistrictCode":"24"},{"Name":"Kulkayu (Hartley Bay) 4","Type":"Indian reserve","RegionalDistrictCode":"24"},{"Name":"Kulkayu (Hartley Bay) 4A","Type":"Indian reserve","RegionalDistrictCode":"24"},{"Name":"Lax Kw''alaams 1","Type":"Indian reserve","RegionalDistrictCode":"24"},{"Name":"Masset","Type":"Village","RegionalDistrictCode":"24"},{"Name":"Masset 1","Type":"Indian reserve","RegionalDistrictCode":"24"},{"Name":"North Coast A","Type":"Regional district electoral area","RegionalDistrictCode":"24"},{"Name":"North Coast C","Type":"Regional district electoral area","RegionalDistrictCode":"24"},{"Name":"North Coast D","Type":"Regional district electoral area","RegionalDistrictCode":"24"},{"Name":"North Coast E","Type":"Regional district electoral area","RegionalDistrictCode":"24"},{"Name":"Port Clements","Type":"Village","RegionalDistrictCode":"24"},{"Name":"Port Edward","Type":"District municipality","RegionalDistrictCode":"24"},{"Name":"Prince Rupert","Type":"City","RegionalDistrictCode":"24"},{"Name":"Queen Charlotte","Type":"Village","RegionalDistrictCode":"24"},{"Name":"S1/2 Tsimpsean 2","Type":"Indian reserve","RegionalDistrictCode":"24"},{"Name":"Skidegate 1","Type":"Indian reserve","RegionalDistrictCode":"24"},{"Name":"Tlaa Gaa Aawtlaas 28","Type":"Indian reserve","RegionalDistrictCode":"24"},{"Name":"Bridge River 1","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Cayoosh Creek 1","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Cheakamus 11","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Chilhil 6","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Fountain 1","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Fountain 10","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Fountain 11","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Fountain 12","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Fountain 1B","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Fountain 1D","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Fountain 3","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Fountain 3A","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Fountain Creek 8","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Kowtain 17","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Lillooet","Type":"District municipality","RegionalDistrictCode":"13"},{"Name":"Lillooet 1","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"McCartney''s Flat 4","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Mission 5","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Mount Currie","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Necait 6","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Nequatque","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Nesikep 6","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Nesuch 3","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Pashilqua 2","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Pavilion 1","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Pemberton","Type":"Village","RegionalDistrictCode":"13"},{"Name":"Seaichem 16","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Seton Lake 5","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Slosh 1","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Squamish","Type":"District municipality","RegionalDistrictCode":"13"},{"Name":"Squamish-Lillooet A","Type":"Regional district electoral area","RegionalDistrictCode":"13"},{"Name":"Squamish-Lillooet B","Type":"Regional district electoral area","RegionalDistrictCode":"13"},{"Name":"Squamish-Lillooet C","Type":"Regional district electoral area","RegionalDistrictCode":"13"},{"Name":"Squamish-Lillooet D","Type":"Regional district electoral area","RegionalDistrictCode":"13"},{"Name":"Stawamus 24","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Towinock 2","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Waiwakum 14","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Whistler","Type":"District municipality","RegionalDistrictCode":"13"},{"Name":"Yekwaupsum 18","Type":"Indian reserve","RegionalDistrictCode":"13"},{"Name":"Dease River 1","Type":"Indian reserve","RegionalDistrictCode":"27"},{"Name":"Five Mile Point 3","Type":"Indian reserve","RegionalDistrictCode":"27"},{"Name":"Good Hope Lake","Type":"Indian settlement","RegionalDistrictCode":"27"},{"Name":"Liard River 3","Type":"Indian reserve","RegionalDistrictCode":"27"},{"Name":"Lower Post","Type":"Indian settlement","RegionalDistrictCode":"27"},{"Name":"Stikine Region","Type":"Regional district electoral area","RegionalDistrictCode":"27"},{"Name":"Unnamed 10","Type":"Indian reserve","RegionalDistrictCode":"27"},{"Name":"Ahaminaquus 12","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Campbell River","Type":"City","RegionalDistrictCode":"5"},{"Name":"Campbell River 11","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Cape Mudge 10","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Chenahkint 12","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Ehatis 11","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Gold River","Type":"Village","RegionalDistrictCode":"5"},{"Name":"Homalco 9","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Houpsitas 6","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Nenagwas 12","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Oclucje 7","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Quinsam 12","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Sayward","Type":"Village","RegionalDistrictCode":"5"},{"Name":"Squirrel Cove 8","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Strathcona A","Type":"Regional district electoral area","RegionalDistrictCode":"5"},{"Name":"Strathcona B","Type":"Regional district electoral area","RegionalDistrictCode":"5"},{"Name":"Strathcona C","Type":"Regional district electoral area","RegionalDistrictCode":"5"},{"Name":"Strathcona D (Oyster Bay - Buttle Lake)","Type":"Regional district electoral area","RegionalDistrictCode":"5"},{"Name":"Tahsis","Type":"Village","RegionalDistrictCode":"5"},{"Name":"Tork 7","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Tsa Xana 18","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Village Island 1","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Yuquot 1","Type":"Indian reserve","RegionalDistrictCode":"5"},{"Name":"Zeballos","Type":"Village","RegionalDistrictCode":"5"},{"Name":"Chekwelp 26","Type":"Indian reserve","RegionalDistrictCode":"12"},{"Name":"Gibsons","Type":"Town","RegionalDistrictCode":"12"},{"Name":"Sechelt","Type":"District municipality","RegionalDistrictCode":"12"},{"Name":"Sechelt (Part) - Sunshine Coast","Type":"Indian government district","RegionalDistrictCode":"12"},{"Name":"Sunshine Coast A","Type":"Regional district electoral area","RegionalDistrictCode":"12"},{"Name":"Sunshine Coast B","Type":"Regional district electoral area","RegionalDistrictCode":"12"},{"Name":"Sunshine Coast D","Type":"Regional district electoral area","RegionalDistrictCode":"12"},{"Name":"Sunshine Coast E","Type":"Regional district electoral area","RegionalDistrictCode":"12"},{"Name":"Sunshine Coast F","Type":"Regional district electoral area","RegionalDistrictCode":"12"},{"Name":"105 Mile Post 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Ashcroft","Type":"Village","RegionalDistrictCode":"15"},{"Name":"Ashcroft 4","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Barriere","Type":"District municipality","RegionalDistrictCode":"15"},{"Name":"Basque 18","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Bonaparte 3","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Boothroyd 8A","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Cache Creek","Type":"Village","RegionalDistrictCode":"15"},{"Name":"Canoe Creek 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Canoe Creek 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Chase","Type":"Village","RegionalDistrictCode":"15"},{"Name":"Chuchhraischin","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Clearwater","Type":"District municipality","RegionalDistrictCode":"15"},{"Name":"Clinton","Type":"Village","RegionalDistrictCode":"15"},{"Name":"Coldwater 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Douglas Lake 3","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Entlqwekkinh 19","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Halhalaeden","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Hamilton Creek 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"High Bar 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Inkluckcheen","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Inklyuhkinatko 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Joeyaska 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Kamloops","Type":"City","RegionalDistrictCode":"15"},{"Name":"Kamloops 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Kanaka Bar","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Kitzowit 20","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Klahkamich 17","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Kleetlekut 22","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Klickkumcheen 18","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Kloklowuck 7","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Kumcheen 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Logan Lake","Type":"District municipality","RegionalDistrictCode":"15"},{"Name":"Louis Creek 4","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Lower Hat Creek 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Lytton","Type":"Village","RegionalDistrictCode":"15"},{"Name":"Lytton 4A","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Lytton 4E","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Lytton 9A","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Lytton 9B","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Marble Canyon 3","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Merritt","Type":"City","RegionalDistrictCode":"15"},{"Name":"Nekalliston 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Nekliptum 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Neskonlith","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Nickel Palm 4","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Nickeyeah 25","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Nicola Lake 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Nicola Mameet 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Nicomen 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Nkaih 10","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Nohomeen 23","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Nooaitch 10","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"North Thompson 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Nuuautin 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Oregon Jack Creek 5","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Papyum 27","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Paska Island 3","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Paul''s Basin 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Pemynoos 9","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Peq-Paq 22","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Sahhaltkum 4","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Seah 5","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Shackan 11","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Shawniken 4B","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Siska Flat","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Skeetchestn","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Skuppah 2A","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Skuppah 4","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Skwayaynope 26","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Spences Bridge","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Spintlum Flat 3","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Squaam 2","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Stequmwhulpa 5","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Stryen 9","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Sun Peaks Mountain","Type":"Village","RegionalDistrictCode":"15"},{"Name":"Thompson-Nicola A (Wells Gray Country)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"Name":"Thompson-Nicola B (Thompson Headwaters)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"Name":"Thompson-Nicola E (Bonaparte Plateau)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"Name":"Thompson-Nicola I (Blue Sky Country)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"Name":"Thompson-Nicola J (Copper Desert Country)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"Name":"Thompson-Nicola L (Grasslands)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"Name":"Thompson-Nicola M (Beautiful Nicola Valley - North)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"Name":"Thompson-Nicola N (Beautiful Nicola Valley - South)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"Name":"Thompson-Nicola O (Lower North Thompson)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"Name":"Thompson-Nicola P (Rivers and the Peaks)","Type":"Regional district electoral area","RegionalDistrictCode":"15"},{"Name":"Tsaukan 12","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Twoyqhalsht 16","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Upper Hat Creek 1","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Upper Nepa 6","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Whispering Pines 4","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Yawaucht 11","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Zacht 5","Type":"Indian reserve","RegionalDistrictCode":"15"},{"Name":"Zoht 4","Type":"Indian reserve","RegionalDistrictCode":"15"}]';
+-- Cleanup existing data in "Communities" table
+ DELETE FROM public."Communities";
+-- Insert into "Communities" table.
+ json_data jsonb := '[{"Name" : "Becher Bay 1", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Central Saanich", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Cole Bay 3", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Colwood", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "East Saanich 2", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Esquimalt", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Esquimalt", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Galiano Island 9", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Gordon River 2", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Highlands", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Juan de Fuca (Part 1)", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Juan de Fuca (Part 2)", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Langford", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Metchosin", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "New Songhees 1A", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "North Saanich", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Oak Bay", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Saanich", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Saltspring Island", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Sidney", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Sooke", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Southern Gulf Islands", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "South Saanich 1", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "T''Sou-ke", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Union Bay 4", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Victoria", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "View Royal", "Type" : "", "RegionalDistrictCode" : "1"}, {"Name" : "Abbotsford", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Aitchelitch 9", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Albert Flat 5", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Boothrouyd 5B", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Boothroyd 13", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Boston Bar 1A", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Bucktum 4", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Chawathil 4", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Cheam 1", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Chehalis 5", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Chilliwack", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Coqualeetza", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Douglas 8", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Fraser Valley A", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Fraser Valley B", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Fraser Valley C", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Fraser Valley D", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Fraser Valley E", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Fraser Valley F", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Fraser Valley G", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Fraser Valley H", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Harrison Hot Springs", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Holachten 8", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Hope", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Inkahtsaph 6", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Kahmoose 4", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Kent", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Kopchitchin 2", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Kwawkwawapilt 6", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Lakahahmen 11", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Langley 2", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Lukseetsissum 9", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Matsqui Main 2", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Mission", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Ohamil 1", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Paqulh", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Peters 1", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Popkum 1", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Puckatholetchin 11", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Q''alatkú7em", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Ruby Creek 2", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Sachteen", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Saddle Rock 9", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Schelowat 1", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Schkam 2", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Scowlitz 1", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Seabird Island", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Skawahlook 1", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Skookumchuck 4", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Skookumchuck 4A", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Skowkale", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Skwah 4", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Skwali 3", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Skway 5", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Skweahm 10", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Soowahlie 14", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Speyum 3", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Spuzzum 1", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Squawkum Creek 3", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Squiaala", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Stullawheets 8", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Tipella 7", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Tseatah 2", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Tuckkwiowhum 1", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Tzeachten 13", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Upper Sumas 6", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Yakweakwioose 12", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Yale Town 1", "Type" : "", "RegionalDistrictCode" : "10"}, {"Name" : "Anmore", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Barnston Island 3", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Belcarra", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Bowen Island", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Burnaby", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Burrard Inlet 3", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Capilano 5", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Coquitlam", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Coquitlam 1", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Coquitlam 2", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Delta", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Katzie 1", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Katzie 2", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Kitsilano 6", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Langley", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Langley", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Lions Bay", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Maple Ridge", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Matsqui 4", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "McMillan Island 6", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Metro Vancouver A", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Mission 1", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Musqueam 2", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Musqueam 4", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "New Westminster", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "North Vancouver", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "North Vancouver", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Pitt Meadows", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Port Coquitlam", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Port Moody", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Richmond", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Semiahmoo", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Seymour Creek 2", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Surrey", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Tsawwassen", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Vancouver", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "West Vancouver", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "White Rock", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Whonnock 1", "Type" : "", "RegionalDistrictCode" : "11"}, {"Name" : "Chekwelp 26", "Type" : "", "RegionalDistrictCode" : "12"}, {"Name" : "Gibsons", "Type" : "", "RegionalDistrictCode" : "12"}, {"Name" : "Sechelt", "Type" : "", "RegionalDistrictCode" : "12"}, {"Name" : "Sechelt (Part)", "Type" : "", "RegionalDistrictCode" : "12"}, {"Name" : "Sunshine Coast A", "Type" : "", "RegionalDistrictCode" : "12"}, {"Name" : "Sunshine Coast B", "Type" : "", "RegionalDistrictCode" : "12"}, {"Name" : "Sunshine Coast D", "Type" : "", "RegionalDistrictCode" : "12"}, {"Name" : "Sunshine Coast E", "Type" : "", "RegionalDistrictCode" : "12"}, {"Name" : "Sunshine Coast F", "Type" : "", "RegionalDistrictCode" : "12"}, {"Name" : "Bridge River 1", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Cayoosh Creek 1", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Cheakamus 11", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Chilhil 6", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Fountain 1", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Fountain 10", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Fountain 11", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Fountain 12", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Fountain 1B", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Fountain 1D", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Fountain 3", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Fountain 3A", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Fountain Creek 8", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Kowtain 17", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Lillooet", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Lillooet 1", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "McCartney''s Flat 4", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Mission 5", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Mount Currie", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Necait 6", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Nequatque", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Nesikep 6", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Nesuch 3", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Pashilqua 2", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Pavilion 1", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Pemberton", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Seaichem 16", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Seton Lake 5", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Slosh 1", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Squamish", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Squamish-Lillooet A", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Squamish-Lillooet B", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Squamish-Lillooet C", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Squamish-Lillooet D", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Stawamus 24", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Towinock 2", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Waiwakum 14", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Whistler", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Whitecap 1", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Yekwaupsum 18", "Type" : "", "RegionalDistrictCode" : "13"}, {"Name" : "Alexis 9", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Ashnola 10", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Blind Creek 6", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Chopaka 7 & 8", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Chuchuwayha 2", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Keremeos", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Lower Similkameen 2", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Lulu 5", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Okanagan-Similkameen A", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Okanagan-Similkameen B", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Okanagan-Similkameen C", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Okanagan-Similkameen D", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Okanagan-Similkameen E", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Okanagan-Similkameen F", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Okanagan-Similkameen G", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Okanagan-Similkameen H", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Okanagan-Similkameen I", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Oliver", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Osoyoos", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Osoyoos 1", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Penticton", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Penticton 1", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Princeton", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "Summerland", "Type" : "", "RegionalDistrictCode" : "14"}, {"Name" : "105 Mile Post 2", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Ashcroft", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Ashcroft 4", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Barriere", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Basque 18", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Bonaparte 3", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Boothroyd 8A", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Cache Creek", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Canoe Creek 1", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Canoe Creek 2", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Chase", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Chuchhraischin", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Clearwater", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Clinton", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Coldwater 1", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Douglas Lake 3", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Entlqwekkinh 19", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Halhalaeden", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Hamilton Creek 2", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "High Bar 1", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Inkluckcheen", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Inklyuhkinatko 2", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Joeyaska 2", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Kamloops", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Kamloops 1", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Kanaka Bar", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Kitzowit 20", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Klahkamich 17", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Kleetlekut 22", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Klickkumcheen 18", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Kloklowuck 7", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Kumcheen 1", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Logan Lake", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Louis Creek 4", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Lower Hat Creek 2", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Lytton", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Lytton 4A", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Lytton 4E", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Lytton 9A", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Lytton 9B", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Marble Canyon 3", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Merritt", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Nekalliston 2", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Nekliptum 1", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Neskonlith", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Nickel Palm 4", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Nickeyeah 25", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Nicola Lake 1", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Nicola Mameet 1", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Nicomen 1", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Nkaih 10", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Nohomeen 23", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Nooaitch 10", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "North Thompson 1", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Nuuautin 2", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Oregon Jack Creek 5", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Papyum 27", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Paska Island 3", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Paul''s Basin 2", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Pemynoos 9", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Peq-Paq 22", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Sahhaltkum 4", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Seah 5", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Shackan 11", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Shawniken 4B", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Siska Flat", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Siska Flat 5B", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Skeetchestn", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Skuppah 2A", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Skuppah 4", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Skwayaynope 26", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Spences Bridge", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Spintlum Flat 3", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Squaam 2", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Stequmwhulpa 5", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Stryen 9", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Sun Peaks Mountain", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Thompson-Nicola A (Wells Gray Country)", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Thompson-Nicola B (Thompson Headwaters)", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Thompson-Nicola E (Bonaparte Plateau)", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Thompson-Nicola I (Blue Sky Country)", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Thompson-Nicola J (Copper Desert Country)", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Thompson-Nicola L (Grasslands)", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Thompson-Nicola M (Beautiful Nicola Valley - North)", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Thompson-Nicola N (Beautiful Nicola Valley - South)", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Thompson-Nicola O (Lower North Thompson)", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Thompson-Nicola P (Rivers and the Peaks)", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Toops 3", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Tsaukan 12", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Twoyqhalsht 16", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Upper Hat Creek 1", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Upper Nepa 6", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Whispering Pines 4", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Yawaucht 11", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Zacht 5", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Zoht 4", "Type" : "", "RegionalDistrictCode" : "15"}, {"Name" : "Central Okanagan", "Type" : "", "RegionalDistrictCode" : "16"}, {"Name" : "Central Okanagan West", "Type" : "", "RegionalDistrictCode" : "16"}, {"Name" : "Duck Lake 7", "Type" : "", "RegionalDistrictCode" : "16"}, {"Name" : "Kelowna", "Type" : "", "RegionalDistrictCode" : "16"}, {"Name" : "Lake Country", "Type" : "", "RegionalDistrictCode" : "16"}, {"Name" : "Peachland", "Type" : "", "RegionalDistrictCode" : "16"}, {"Name" : "Tsinstikeptum 10", "Type" : "", "RegionalDistrictCode" : "16"}, {"Name" : "Tsinstikeptum 9", "Type" : "", "RegionalDistrictCode" : "16"}, {"Name" : "West Kelowna", "Type" : "", "RegionalDistrictCode" : "16"}, {"Name" : "Armstrong", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "Coldstream", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "Enderby", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "Enderby 2", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "Harris 3", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "Lumby", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "North Okanagan B", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "North Okanagan C", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "North Okanagan D", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "North Okanagan E", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "North Okanagan F", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "Okanagan (Part) 1", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "Priest''s Valley 6", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "Spallumcheen", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "Vernon", "Type" : "", "RegionalDistrictCode" : "17"}, {"Name" : "Chum Creek 2", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Columbia Shuswap A", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Columbia Shuswap B", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Columbia Shuswap C", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Columbia Shuswap D", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Columbia Shuswap E", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Columbia Shuswap F", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Columbia Shuswap G", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Golden", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Hustalen 1", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "North Bay 5", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Okanagan (Part) 1", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Quaaout 1", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Revelstoke", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Salmon Arm", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Salmon River 1", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Scotch Creek 4", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Sicamous", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Switsemalph", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Switsemalph 3", "Type" : "", "RegionalDistrictCode" : "18"}, {"Name" : "Canal Flats", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Cassimayooks (Mayook) 5", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Columbia Lake 3", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Cranbrook", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "East Kootenay A", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "East Kootenay B", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "East Kootenay C", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "East Kootenay E", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "East Kootenay F", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "East Kootenay G", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Elkford", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Fernie", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Invermere", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Isidore''s Ranch 4", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Kimberley", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Kootenay 1", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Radium Hot Springs", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Shuswap", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Sparwood", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "St. Mary''s", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Tobacco Plains 2", "Type" : "", "RegionalDistrictCode" : "19"}, {"Name" : "Chemainus 13", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Cowichan", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Cowichan Lake", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Cowichan Valley A", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Cowichan Valley B", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Cowichan Valley C", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Cowichan Valley D", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Cowichan Valley E", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Cowichan Valley F", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Cowichan Valley G", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Cowichan Valley H", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Cowichan Valley I", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Duncan", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Est-Patrolas 4", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Halalt 2", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Kil-pah-las 3", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Ladysmith", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Lake Cowichan", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Lyacksun 3", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Malachan 11", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Malahat 11", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "North Cowichan", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Oyster Bay 12", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Penelakut Island 7", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Portier Pass 5", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Shingle Point 4", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Squaw-Hay-One 11", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Theik 2", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Tsussie 6", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Tzart-Lam 5", "Type" : "", "RegionalDistrictCode" : "2"}, {"Name" : "Castlegar", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Central Kootenay A", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Central Kootenay B", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Central Kootenay C", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Central Kootenay D", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Central Kootenay E", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Central Kootenay F", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Central Kootenay G", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Central Kootenay H", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Central Kootenay I", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Central Kootenay J", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Central Kootenay K", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Creston", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Creston 1", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Kaslo", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Lower Kootenay 1C", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Lower Kootenay 5", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Nakusp", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Nelson", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "New Denver", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Salmo", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Silverton", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Slocan", "Type" : "", "RegionalDistrictCode" : "20"}, {"Name" : "Fruitvale", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Grand Forks", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Greenwood", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Kootenay Boundary A", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Kootenay Boundary B / Lower Columbia-Old-Glory", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Kootenay Boundary C / Christina Lake", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Kootenay Boundary D / Rural Grand Forks", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Kootenay Boundary E / West Boundary", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Midway", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Montrose", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Rossland", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Trail", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Warfield", "Type" : "", "RegionalDistrictCode" : "21"}, {"Name" : "Agats Meadow 8", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Alexandria", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Alexis Creek 14", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Alexis Creek 16", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Alexis Creek 21", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Alexis Creek 34", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Alkali Lake 1", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Alkali Lake 4A", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Anahim''s Flat 1", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Anahim''s Meadow", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Baezaeko River 27", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Baptiste Meadow 2", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Betty Creek 18", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Canim Lake 1", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Canim Lake 2", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Canim Lake 4", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Canoe Creek 3", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Cariboo A", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Cariboo B", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Cariboo C", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Cariboo D", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Cariboo E", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Cariboo F", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Cariboo G", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Cariboo H", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Cariboo I", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Cariboo J", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Cariboo K", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Cariboo L", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Charley Boy''s Meadow 3", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Chilco Lake 1", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Chilco Lake 1A", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Coglistiko River 29", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Deep Creek 2", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Dog Creek 1", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Dog Creek 2", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Dragon Lake 3", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Euchinico Creek 17", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Fishtrap 19", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Garden", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Johny Sticks 2", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Kluskus 1", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Lezbye 6", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Little Springs", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Lohbiee 3", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Michel Gardens 36", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Nazco 20", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "One Hundred Mile House", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Puntzi Lake 2", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Quesnel", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Quesnel 1", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Redstone Flat 1", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Redstone Flat 1A", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Salmon River Meadow 7", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Sandy Harry 4", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Soda Creek 1", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Squinas 2", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Stone 1", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Sundayman''s Meadow 3", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Swan Lake 3", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Tanakut 4", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Thomas Squinas Ranch 2A", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Toosey 1", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Towdystan Lake 3", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Trout Lake Alec 16", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Ulkatcho 13", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Ulkatcho 14A", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Wells", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Williams Lake", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Williams Lake 1", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Windy Mouth 7", "Type" : "", "RegionalDistrictCode" : "22"}, {"Name" : "Fort George 2", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "Fraser-Fort George A", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "Fraser-Fort George C", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "Fraser-Fort George D", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "Fraser-Fort George E", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "Fraser-Fort George F", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "Fraser-Fort George G", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "Fraser-Fort George H", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "Mackenzie", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "McBride", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "McCleod Lake 5", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "McLeod Lake 1", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "Prince George", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "Valemount", "Type" : "", "RegionalDistrictCode" : "23"}, {"Name" : "Daajing Giids", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "Dolphin Island 1", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "Kulkayu (Hartley Bay) 4", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "Kulkayu (Hartley Bay) 4A", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "Lax Kw''alaams 1", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "Masset", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "Masset 1", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "North Coast A", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "North Coast C", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "North Coast D", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "North Coast E", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "Port Clements", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "Port Edward", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "Prince Rupert", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "S1/2 Tsimpsean 2", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "Skidegate 1", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "Tlaa Gaa Aawtlaas 28", "Type" : "", "RegionalDistrictCode" : "24"}, {"Name" : "Anlaw 4", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Babine 17", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Bulkley River 19", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Coryatsaqua (Moricetown) 2", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Dease Lake 9", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Gitanmaax 1", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Gitanyow 1", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Gitsegukla 1", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Gitwangak 1", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Guhthe Tah 12", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Hagwilget 1", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Hazelton", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Iskut 6", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kispiox 1", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kitamaat 2", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kitasoo 1", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kitimat", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kitimat-Stikine A", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kitimat-Stikine B", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kitimat-Stikine C (Part 1)", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kitimat-Stikine C (Part 2)", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kitimat-Stikine D", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kitimat-Stikine E", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kitimat-Stikine F", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kitselas 1", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kitsumkaylum 1", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kshish 4", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Kulspai 6", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Moricetown 1", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "New Hazelton", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Nisga''a", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Sik-e-dakh 2", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Stewart", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Tahltan 1", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Telegraph Creek", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Terrace", "Type" : "", "RegionalDistrictCode" : "25"}, {"Name" : "Babine 16", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Babine 25", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Babine 6", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Babine Lake 21B", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Binche 2", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Bulkley-Nechako A", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Bulkley-Nechako B", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Bulkley-Nechako C", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Bulkley-Nechako D", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Bulkley-Nechako E", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Bulkley-Nechako F", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Bulkley-Nechako G", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Burns Lake", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Burns Lake 18", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Cheslatta 1", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Duncan Lake 2", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Dzitline Lee 9", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Fort St. James", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Francois Lake 7", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Fraser Lake", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Granisle", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Houston", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Jean Baptiste 28", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Laketown 3", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Mission Lands 17", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Nak''azdli", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Nautley (Fort Fraser) 1", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Nedoats 11", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Noonla 6", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "North Tacla Lake", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Omineca 1", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Palling 1", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Poison Creek 17A", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Seaspunkut 4", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Skins Lake 16A", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Skins Lake 16B", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Smithers", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Sowchea 3", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Stellaquo (Stella) 1", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Stony Creek 1", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Tache 1", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Tacla Lake (Ferry Landing) 9", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Tadinlay 15", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Tatla''t East 2", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Tatla West 11", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Telkwa", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Uncha Lake 13A", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Vanderhoof", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Williams Prairie Meadow 1A", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Woyenne 27", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Ye Koo Che 3", "Type" : "", "RegionalDistrictCode" : "26"}, {"Name" : "Dease River 1", "Type" : "", "RegionalDistrictCode" : "27"}, {"Name" : "Five Mile Point 3", "Type" : "", "RegionalDistrictCode" : "27"}, {"Name" : "Good Hope Lake", "Type" : "", "RegionalDistrictCode" : "27"}, {"Name" : "Liard River 3", "Type" : "", "RegionalDistrictCode" : "27"}, {"Name" : "Lower Post", "Type" : "", "RegionalDistrictCode" : "27"}, {"Name" : "Stikine Region", "Type" : "", "RegionalDistrictCode" : "27"}, {"Name" : "Unnamed 10", "Type" : "", "RegionalDistrictCode" : "27"}, {"Name" : "Blueberry River 205", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Chetwynd", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Dawson Creek", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Doig River 206", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "East Moberly Lake 169", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Finlay River 6", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Fort St. John", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Fort Ware 1", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Halfway River 168", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Hudson''s Hope", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Ingenika Point", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Mesilinka 7", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Peace River B", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Peace River C", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Peace River D", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Peace River E", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Pouce Coupe", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Taylor", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Tumbler Ridge", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "West Moberly Lake 168A", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Wochiigii Nané?", "Type" : "", "RegionalDistrictCode" : "28"}, {"Name" : "Fontas 1", "Type" : "", "RegionalDistrictCode" : "29"}, {"Name" : "Fort Nelson 2", "Type" : "", "RegionalDistrictCode" : "29"}, {"Name" : "Kahntah 3", "Type" : "", "RegionalDistrictCode" : "29"}, {"Name" : "Northern Rockies", "Type" : "", "RegionalDistrictCode" : "29"}, {"Name" : "Prophet River 4", "Type" : "", "RegionalDistrictCode" : "29"}, {"Name" : "Lantzville", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Nanaimo", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Nanaimo A", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Nanaimo B", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Nanaimo C", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Nanaimo E", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Nanaimo F", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Nanaimo G", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Nanaimo H", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Nanaimo River", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Nanaimo Town 1", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Nanoose", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Parksville", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Qualicum", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Qualicum Beach", "Type" : "", "RegionalDistrictCode" : "3"}, {"Name" : "Ahahswinis 1", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Alberni 2", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Alberni-Clayoquot A", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Alberni-Clayoquot B", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Alberni-Clayoquot C", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Alberni-Clayoquot D", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Alberni-Clayoquot E", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Alberni-Clayoquot F", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Anacla 12", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Clakamucus 2", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Elhlateese 2", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Esowista 3", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Hesquiat 1", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Ittatsoo 1", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Klehkoot 2", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Macoah 1", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Marktosis 15", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Numukamis 1", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Opitsat 1", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Port Alberni", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Refuge Cove 6", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Sachsa 4", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Tin Wis 11", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Tofino", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Tsahaheh 1", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Ucluelet", "Type" : "", "RegionalDistrictCode" : "4"}, {"Name" : "Ahaminaquus 12", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Campbell River", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Campbell River 11", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Cape Mudge 10", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Chenahkint 12", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Ehatis 11", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Gold River", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Homalco 9", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Houpsitas 6", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Nenagwas 12", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Oclucje 7", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Quinsam 12", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Sayward", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Squirrel Cove 8", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Strathcona A", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Strathcona B", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Strathcona C", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Strathcona D (Oyster Bay - Buttle Lake)", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Tahsis", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Tork 7", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Tsa Xana 18", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Village Island 1", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Yuquot 1", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Zeballos", "Type" : "", "RegionalDistrictCode" : "5"}, {"Name" : "Comox", "Type" : "", "RegionalDistrictCode" : "6"}, {"Name" : "Comox 1", "Type" : "", "RegionalDistrictCode" : "6"}, {"Name" : "Comox Valley A", "Type" : "", "RegionalDistrictCode" : "6"}, {"Name" : "Comox Valley B (Lazo North)", "Type" : "", "RegionalDistrictCode" : "6"}, {"Name" : "Comox Valley C (Puntledge - Black Creek)", "Type" : "", "RegionalDistrictCode" : "6"}, {"Name" : "Courtenay", "Type" : "", "RegionalDistrictCode" : "6"}, {"Name" : "Cumberland", "Type" : "", "RegionalDistrictCode" : "6"}, {"Name" : "Pentledge 2", "Type" : "", "RegionalDistrictCode" : "6"}, {"Name" : "Powell River", "Type" : "", "RegionalDistrictCode" : "7"}, {"Name" : "qathet A", "Type" : "", "RegionalDistrictCode" : "7"}, {"Name" : "qathet B", "Type" : "", "RegionalDistrictCode" : "7"}, {"Name" : "qathet C", "Type" : "", "RegionalDistrictCode" : "7"}, {"Name" : "qathet D", "Type" : "", "RegionalDistrictCode" : "7"}, {"Name" : "qathet E", "Type" : "", "RegionalDistrictCode" : "7"}, {"Name" : "Sechelt (Part)", "Type" : "", "RegionalDistrictCode" : "7"}, {"Name" : "Sliammon 1", "Type" : "", "RegionalDistrictCode" : "7"}, {"Name" : "Alert Bay", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Alert Bay", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Dead Point 5", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Fort Rupert 1", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Gwayasdums 1", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Hope Island 1", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Hopetown 10A", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Kippase 2", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Mount Waddington A", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Mount Waddington B", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Mount Waddington C", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Mount Waddington D", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Nimpkish 2", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Port Alice", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Port Hardy", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Port McNeill", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Quaee 7", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Quatsino Subdivision 18", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Thomas Point 5", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Thomas Point 5A", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Tsulquate 4", "Type" : "", "RegionalDistrictCode" : "8"}, {"Name" : "Bella Bella 1", "Type" : "", "RegionalDistrictCode" : "9"}, {"Name" : "Bella Coola 1", "Type" : "", "RegionalDistrictCode" : "9"}, {"Name" : "Central Coast A", "Type" : "", "RegionalDistrictCode" : "9"}, {"Name" : "Central Coast C", "Type" : "", "RegionalDistrictCode" : "9"}, {"Name" : "Central Coast D", "Type" : "", "RegionalDistrictCode" : "9"}, {"Name" : "Central Coast E", "Type" : "", "RegionalDistrictCode" : "9"}, {"Name" : "Katit 1", "Type" : "", "RegionalDistrictCode" : "9"}]';
BEGIN
-- Insert into "Communities" table
INSERT INTO public."Communities"
@@ -16,4 +19,4 @@ BEGIN
pg_catalog.now()
FROM jsonb_array_elements(json_data::jsonb) AS data;
-END $$;
+END $$;
\ No newline at end of file
diff --git a/documentation/applicant-portal/applicant-profile-data-providers.md b/documentation/applicant-portal/applicant-profile-data-providers.md
index 93c919dbf..438f7a1bb 100644
--- a/documentation/applicant-portal/applicant-profile-data-providers.md
+++ b/documentation/applicant-portal/applicant-profile-data-providers.md
@@ -101,7 +101,7 @@ sequenceDiagram
### 1. ContactInfoDataProvider (`CONTACTINFO`)
-**Purpose:** Aggregates contact information from two sources — profile-linked contacts and application-level contacts.
+**Purpose:** Aggregates contact information from three sources — profile-linked contacts, application-level contacts, and applicant agent contacts derived from the submission login token.
**Dependencies:**
- `ICurrentTenant` — for multi-tenant scoping
@@ -112,7 +112,8 @@ sequenceDiagram
1. Switches to the requested tenant context.
2. Retrieves **profile contacts** — contacts linked to the applicant profile via `ContactLink` records where `RelatedEntityType == "ApplicantProfile"` and `RelatedEntityId == profileId`. These are **editable** (`IsEditable = true`).
3. Retrieves **application contacts** — contacts on applications whose form submissions match the normalized OIDC subject. These are **read-only** (`IsEditable = false`).
-4. Merges both lists into a single `ApplicantContactInfoDto.Contacts` collection.
+4. Retrieves **applicant agent contacts** — contact information derived from `ApplicantAgent` records on applications whose form submissions match the normalized OIDC subject. The join path is `Submission → Application → ApplicantAgent`. These are **read-only** (`IsEditable = false`).
+5. Merges all three lists into a single `ApplicantContactInfoDto.Contacts` collection.
**Subject Normalization:** The OIDC subject (e.g. `user@idir`) is normalized by stripping everything after `@` and converting to uppercase.
@@ -132,15 +133,27 @@ flowchart TD
AC1["Normalize Subject
strip domain, uppercase"]
AC2["Query ApplicationFormSubmission
WHERE OidcSub = normalizedSubject"]
AC3["JOIN ApplicationContact
ON ApplicationId"]
+ AC3b["JOIN Application
ON ApplicationId
for ReferenceNo"]
AC4["Map to ContactInfoItemDto
IsEditable = false"]
- AC1 --> AC2 --> AC3 --> AC4
+ AC1 --> AC2 --> AC3 --> AC3b --> AC4
+ end
+
+ subgraph AgentContacts["Applicant Agent Contacts - Read-Only"]
+ AG1["Normalize Subject
strip domain, uppercase"]
+ AG2["Query ApplicationFormSubmission
WHERE OidcSub = normalizedSubject"]
+ AG3["JOIN ApplicantAgent
ON ApplicationId"]
+ AG3b["JOIN Application
ON ApplicationId
for ReferenceNo"]
+ AG4["Map to ContactInfoItemDto
ContactType = 'ApplicantAgent'
IsEditable = false"]
+ AG1 --> AG2 --> AG3 --> AG3b --> AG4
end
Start --> Tenant
Tenant --> PC1
Tenant --> AC1
+ Tenant --> AG1
PC3 --> Merge["Merge into Contacts list"]
AC4 --> Merge
+ AG4 --> Merge
Merge --> Return([Return ApplicantContactInfoDto])
```
@@ -149,7 +162,26 @@ flowchart TD
| Source | Entity | Join Path | Editable |
|--------|--------|-----------|----------|
| Profile Contacts | `ContactLink` → `Contact` | `ContactLink.RelatedEntityId = profileId` | ✅ Yes |
-| Application Contacts | `ApplicationFormSubmission` → `ApplicationContact` | `Submission.OidcSub = normalizedSubject` | ❌ No |
+| Application Contacts | `ApplicationFormSubmission` → `ApplicationContact` → `Application` | `Submission.OidcSub = normalizedSubject`, `Application.Id` for `ReferenceNo` | ❌ No |
+| Applicant Agent Contacts | `ApplicationFormSubmission` → `ApplicantAgent` → `Application` | `Submission.ApplicationId = Agent.ApplicationId`, `Application.Id` for `ReferenceNo` | ❌ No |
+
+**Applicant Agent Field Mapping:**
+
+The `ApplicantAgent` entity is populated from the CHEFS submission login token during intake import. Its fields are mapped to `ContactInfoItemDto` as follows:
+
+| ApplicantAgent Field | ContactInfoItemDto Field |
+|---------------------|-------------------------|
+| `Id` | `ContactId` |
+| `Name` | `Name` |
+| `Title` | `Title` |
+| `Email` | `Email` |
+| `Phone` | `WorkPhoneNumber` |
+| `PhoneExtension` | `WorkPhoneExtension` |
+| `Phone2` | `MobilePhoneNumber` |
+| `RoleForApplicant` | `Role` |
+| `ApplicationId` | `ApplicationId` |
+| `Application.ReferenceNo` | `ReferenceNo` |
+| _(literal)_ `"ApplicantAgent"` | `ContactType` |
---
@@ -356,7 +388,7 @@ Providers distinguish between **editable** and **read-only** data:
| Provider | Editable Source | Read-Only Source |
|----------|----------------|-----------------|
-| ContactInfo | Profile-linked contacts | Application-level contacts |
+| ContactInfo | Profile-linked contacts | Application-level contacts, Applicant agent contacts |
| AddressInfo | Addresses linked via ApplicantId | Addresses linked via ApplicationId |
---