def METHOD_NAME(vyper_module_folded: vy_ast.Module) -> Tuple[dict, dict]:
    """
    Parses NatSpec documentation from a contract.
    Arguments
    ---------
    vyper_module_folded : Module
        Module-level vyper ast node.
    interface_codes: Dict, optional
        Dict containing relevant data for any import statements related to
        this contract.
    Returns
    -------
    dict
        NatSpec user documentation
    dict
        NatSpec developer documentation
    """
    from vyper.semantics.types.function import FunctionVisibility
    userdoc, devdoc = {}, {}
    source: str = vyper_module_folded.full_source_code
    docstring = vyper_module_folded.get("doc_string.value")
    if docstring:
        devdoc.update(_parse_docstring(source, docstring, ("param", "return")))
        if "notice" in devdoc:
            userdoc["notice"] = devdoc.pop("notice")
    for node in [i for i in vyper_module_folded.body if i.get("doc_string.value")]:
        docstring = node.doc_string.value
        func_type = node._metadata["type"]
        if func_type.visibility != FunctionVisibility.EXTERNAL:
            continue
        if isinstance(node.returns, vy_ast.Tuple):
            ret_len = len(node.returns.elements)
        elif node.returns:
            ret_len = 1
        else:
            ret_len = 0
        args = tuple(i.arg for i in node.args.args)
        invalid_fields = ("title", "license")
        fn_natspec = _parse_docstring(source, docstring, invalid_fields, args, ret_len)
        for method_id in func_type.method_ids:
            if "notice" in fn_natspec:
                userdoc.setdefault("methods", {})[method_id] = {"notice": fn_natspec.pop("notice")}
            if fn_natspec:
                devdoc.setdefault("methods", {})[method_id] = fn_natspec
    return userdoc, devdoc