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 | ---