function buildPostResponse(_aMatches, oResponse, oRequest) {
		function parseLastSegment(sId) {
			if (sId.includes(".")) {
				sId = sId.slice(sId.lastIndexOf(".") + 1);
			}

			return parseInt(sId);
		}

		// compares two hierarchical IDs according to the last(!) segment (numerically, ascending)
		function compareByID(oNodeA, oNodeB) {
			return parseLastSegment(oNodeA.ID) - parseLastSegment(oNodeB.ID);
		}

		function isChildID(sChildID, sParentId) {
			return sChildID !== sParentId
				&& (sParentId === "0"
					? /^\d+$/.test(sChildID) // Note: letters denote other roots!
					: sChildID.startsWith(sParentId)
						&& !sChildID.slice(sParentId.length + 1).includes("."));
		}

		// {"EMPLOYEE_2_MANAGER@odata.bind" : "EMPLOYEES('0')"}
		const oBody = JSON.parse(oRequest.requestBody);
		const bFilteredOut = oBody.STATUS === "Out";
		const sParentId = oBody["EMPLOYEE_2_MANAGER@odata.bind"]
			?.slice("EMPLOYEES('".length, -"')".length);
		const oParent = mNodeById[sParentId];
		if (sParentId && !oParent) {
			throw new Error("Invalid parent ID: " + sParentId);
		}

		const oNewChild = { // same order of keys than for "old" nodes ;-)
			AGE : 0, // see below
			ID : "", // see below
			Name : "", // Q: Derive default from parent's Name? A: No, it's editable!
			DistanceFromRoot : oParent ? oParent.DistanceFromRoot + 1 : 0,
			DrillState : "leaf",
			MANAGER_ID : sParentId ?? null,
			DescendantCount : 0,
			STATUS : bFilteredOut ? "Out" : ""
		};

		if (sParentId) {
			if (sParentId in mChildrenByParentId) {
				// Note: "AGE determines sibling order (ascending)"
				oNewChild.AGE = mChildrenByParentId[sParentId][0].AGE - 1;
			} else { // parent not a leaf anymore
				oParent.DrillState = "collapsed"; // @see #reset
				oNewChild.AGE = oParent.AGE - 1;
			}

			// use "largest" child ID which is hierarchical to parent
			const sLastChildID = Object.values(mNodeById)
				.filter((oChild) => isChildID(oChild.ID, sParentId))
				.sort(compareByID)
				.at(-1)?.ID;
			if (sLastChildID === undefined) {
				oNewChild.ID = sParentId + ".1";
			} else if (sParentId === "0") {
				oNewChild.ID = "" + (parseLastSegment(sLastChildID) + 1);
			} else {
				oNewChild.ID = sParentId + "." + (parseLastSegment(sLastChildID) + 1);
			}
		} else { // new root
			const iRootCount = Object.values(mNodeById)
				.filter((oNode) => oNode.MANAGER_ID === null)
				.length;
			oNewChild.AGE = 60 + iRootCount;
			oNewChild.ID = "0ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"[iRootCount];
		}

		if (oNewChild.ID in mNodeById) {
			throw new Error("Illegal state: duplicate node ID " + oNewChild.ID);
		}
		mNodeById[oNewChild.ID] = oNewChild;
		mRevisionOfAgeById[oNewChild.ID] = 0;
		if (!bFilteredOut) {
			if (sParentId) {
				// Note: server's insert position must not affect UI (until refresh!)
				mChildrenByParentId[sParentId] ??= [];
				mChildrenByParentId[sParentId].push(oNewChild);
				adjustDescendantCount(sParentId, +1);
				aAllNodes.splice(aAllNodes.indexOf(oParent) + oParent.DescendantCount, 0,
					oNewChild);
			} else {
				aAllNodes.push(oNewChild);
			}
		}

		const oCopy = {...update([oNewChild])[0]};
		// RAP would not respond w/ DescendantCount,DistanceFromRoot,DrillState!
		delete oCopy.DescendantCount;
		delete oCopy.DistanceFromRoot;
		delete oCopy.DrillState;
		oResponse.message = JSON.stringify(oCopy);
	}
Builds a response for any POST request on the "EMPLOYEES" collection.

@param {string[]} _aMatches - The matches against the RegExp
@param {object} oResponse - Response object to fill
@param {object} oRequest - Request object to get POST body from