Land: Digitalisation a priority as government eyes Sh8 trillion investment

Dr Angeline Mabula, presents the 2023/24 budget estimates of the Ministry of Lands, Housing and Human Settlements Development in Parliament on May 25, 2023. PHOTO | MERCIFUL MUNUO

What you need to know:

  • The government plans to step up digitalisation of land registration in 2023/24 after registering 29, 820.4 hectares of land that could potentially bring in$3.4 billion (nearly Sh7.8 trillion) in investment

Dar es Salaam. The government plans to step up digitalisation of land registration in 2023/24 as part of wider efforts to attract investment.

The government has so far registered 29,820.4 hectares of land that could potentially bring in $3.4 billion (nearly Sh7.8 trillion) in investment.

Lands, Housing and Human Settlements Development minister Angeline Mabula said this in Parliament in Dodoma yesterday when requesting the House to approve Sh173 billion for recurrent and development expenditure in the next financial year.

According to Dr Mabula, the ministry is committed to modernising its systems, attracting investment and resolving land-related challenges in 2023/24 as part of efforts to make land a catalyst for sustainable development.

This will go hand in hand with allocating significant resources to enhance the use of information and communication technology (ICT) in record-keeping, service delivery and accessing land information.

“The ministry is finalising the Integrated Land Management Information System (ILMIS) by utilising local experts. This system has continued to be used to issue electronic land certificates in Dodoma and Dar es Salaam,” Dr Mabula said.

As of May 15, 2023, a total of 23,150 electronic certificates had been issued through the system, bringing the total number of electronic certificates issued so far to 55,550.

The ministry will also implement measures to enhance the crucial role of land investment in economic growth to further attract investment.

Dr Mabula said through targeted initiatives and policy reforms, the ministry will simplify procedures, reduce bureaucracy and ensure a smooth and efficient process of acquiring land for investment.

She added that the ministry will also continue to take action against landowners who violate the terms of their ownership agreements, including failure to develop land.

“The aim of these measures is to ensure that land is developed and used in accordance with laid-down plans and contributes to economic development,” Dr Mabula said, adding that landowners must adhere to the terms of their agreements with the government to avoid revocation of their ownership rights.

The minister told the House that undeveloped farms and plots have become a major source of land disputes.

“In response to land disputes in the country, the ministry in collaboration with other government authorities has created a committee of experts to deal with the problem in phases, starting with regions where land disputes are most prevalent,” she said.

During the first phase, the committee will seek to resolve disputes in Dar es Salaam and Dodoma regions.

In Dar es Salaam, a total of 386 disputes were identified and 201 matters have been resolved. The remaining 186 cases are currently being addressed.

In Dodoma, 815 disputes were registered and 429 matters, representing 52.6 percent of the total, have been resolved and 386 cases are currently being addressed.

Revenue collection from various sources in the land sector is lagging behind as the ministry has so far been able to collect only Sh132.9 billion, which is 53.2 percent of the Sh250.1 billion target for the current financial year.

Parliament’s Land, Natural Resources and Tourism Committee advised the government to design new collection methods, add new sources, improve awareness among taxpayers as well as integrate electronic payment systems.

Committee chairman Timotheo Mnzava said setting a new target of Sh300 billion is an unrealistic goal considering the previous target was not able to be achieved.

“The committee advises the government to set realistic and achievable goals that can be attained at the scheduled time,” he said.

* * If no #mcl-market-ticker element exists, the widget inserts itself right * after this var sel = thisScript && thisScript.getAttribute("data-target"); if (sel) { var t = document.querySelector(sel); if (t) return t; } // 2) A dedicated mount element the host page provides. var el = document.getElementById(CONFIG.targetId); if (el) return el; // 3) Fallback: insert right after this script tag. el = document.createElement("div"); el.id = CONFIG.targetId; if (thisScript && thisScript.parentNode) { thisScript.parentNode.insertBefore(el, thisScript.nextSibling); } else { document.body.appendChild(el); } return el; } // ---- Data pipeline (identical logic to the standalone banner) ------------ function apiUrl(path) { if (!path) return path; if (/^https?:\/\//i.test(path)) return path; return CONFIG.apiBase + (path.charAt(0) === "/" ? "" : "/") + path; } function toNum(v) { var n = parseFloat(String(v == null ? "" : v).replace(/,/g, "")); return isFinite(n) ? n : null; } function fmtNum(v) { var n = parseFloat(String(v).replace(/,/g, "")); if (!isFinite(n)) return String(v == null ? "" : v); var d = Math.abs(n) >= 1 ? 2 : 4; return n.toLocaleString("en-US", { minimumFractionDigits: d, maximumFractionDigits: d }); } function changeClass(d) { if (d == null || Math.abs(d) < 1e-9) return "flat"; return d > 0 ? "up" : "down"; } function arrow(d) { if (d == null || Math.abs(d) < 1e-9) return "▬"; return d > 0 ? "▲" : "▼"; } async function fetchFiles(category, count) { var res = await fetch(apiUrl("/api/files?category=" + category)); if (!res.ok) throw new Error("list " + category + " " + res.status); var list = await res.json(); return Array.isArray(list) ? list.slice(0, count || 1) : []; } async function parseSheet(meta) { var res = await fetch(apiUrl(meta.url)); if (!res.ok) throw new Error("download " + res.status); var buf = await res.arrayBuffer(); var wb = XLSX.read(buf, { type: "array" }); return XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { defval: "" }); } function buildStocks(rows) { var items = []; rows.forEach(function (r) { var sym = r["Symbol"] || r["symbol"]; if (!sym) return; var close = toNum(r["Close"]); if (close == null) return; var prev = toNum(r["Prev Close"] || r["Previous Close"]); var delta = prev != null ? close - prev : null; var pct = (delta != null && prev) ? (delta / prev) * 100 : null; items.push({ sym: sym, val: fmtNum(close), delta: delta, pct: pct }); }); return items; } function buildForex(rows, prevRows) { var pmean = {}; (prevRows || []).forEach(function (r) { if (r["Currency"]) pmean[r["Currency"]] = toNum(r["Mean"]); }); var items = []; rows.forEach(function (r) { var cur = r["Currency"]; if (!cur) return; var mean = toNum(r["Mean"]), buy = toNum(r["Buying"]), sell = toNum(r["Selling"]); if (buy == null && sell == null && mean == null) return; var pv = pmean[cur]; var ref = mean != null ? mean : (buy != null && sell != null ? (buy + sell) / 2 : (buy != null ? buy : sell)); var delta = pv != null ? ref - pv : null; var pct = (delta != null && pv) ? (delta / pv) * 100 : null; items.push({ sym: cur, buy: buy != null ? fmtNum(buy) : "—", sell: sell != null ? fmtNum(sell) : "—", delta: delta, pct: pct }); }); var order = CONFIG.majorCurrencies; items.sort(function (a, b) { var ia = order.indexOf(a.sym), ib = order.indexOf(b.sym); if (ia === -1) ia = 999; if (ib === -1) ib = 999; if (ia !== ib) return ia - ib; return a.sym < b.sym ? -1 : 1; }); return items; } function chgHTML(it) { var cls = changeClass(it.delta); if (it.delta == null) return ''; var pctTxt = it.pct != null ? (it.pct >= 0 ? "+" : "") + it.pct.toFixed(2) + "%" : ""; return '' + arrow(it.delta) + " " + pctTxt + ""; } function stockHTML(it) { return '' + it.sym + '' + it.val + "" + chgHTML(it) + ""; } function forexHTML(it) { return '' + it.sym + "" + '' + CONFIG.labels.buy + ' ' + it.buy + ' · ' + CONFIG.labels.sell + ' ' + it.sell + "" + chgHTML(it) + ""; } function pill(t, k) { return '' + t + ""; } function render(track, stocks, forex, dateLabel) { if ((!stocks || !stocks.length) && (!forex || !forex.length)) { track.innerHTML = '
' + CONFIG.labels.unavailable + "
"; track.style.animation = "none"; return; } var parts = []; if (stocks && stocks.length) { parts.push(pill(CONFIG.labels.stocks)); stocks.forEach(function (s) { parts.push(stockHTML(s)); }); } if (forex && forex.length) { parts.push(pill(CONFIG.labels.forex, "forex")); forex.forEach(function (f) { parts.push(forexHTML(f)); }); } if (dateLabel) parts.push('' + CONFIG.labels.updated + ": " + dateLabel + ""); var content = parts.join(""); track.innerHTML = content + content; // duplicated for a seamless loop requestAnimationFrame(function () { var dur = Math.max(20, Math.round((track.scrollWidth / 2) / CONFIG.pxPerSecond)); track.style.animation = "none"; void track.offsetWidth; track.style.animation = "mcl-scroll " + dur + "s linear infinite"; }); } async function load(track) { try { var results = await Promise.allSettled([fetchFiles("hisa", 1), fetchFiles("fedha", 2)]); var stocks = [], forex = [], dateLabel = ""; if (results[0].status === "fulfilled" && results[0].value.length) { var hf = results[0].value[0]; dateLabel = hf.date || ""; stocks = buildStocks(await parseSheet(hf)); } if (results[1].status === "fulfilled" && results[1].value.length) { var ff = results[1].value; var curRows = await parseSheet(ff[0]); var prevRows = ff[1] ? await parseSheet(ff[1]) : []; forex = buildForex(curRows, prevRows); if (!dateLabel) dateLabel = ff[0].date || ""; } render(track, stocks, forex, dateLabel); } catch (e) { if (!track.querySelector(".mcl-item")) { track.innerHTML = '
' + CONFIG.labels.unavailable + "
"; track.style.animation = "none"; } } } function mountAndRun() { injectStyle(); var mount = getMount(); mount.innerHTML = '
' + '
' + CONFIG.brand + "" + '' + CONFIG.live + "
" + '
' + CONFIG.labels.unavailable + "
"; var track = mount.querySelector(".mcl-track"); function go() { load(track); setInterval(function () { load(track); }, CONFIG.refreshMs); } if (window.XLSX) { go(); return; } var sc = document.createElement("script"); sc.src = "https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"; sc.onload = go; sc.onerror = function () { track.innerHTML = '
' + CONFIG.labels.unavailable + "
"; }; (document.head || document.documentElement).appendChild(sc); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", mountAndRun); } else { mountAndRun(); } })();