diff --git a/docker/osm-nushell-krm-functions/operations/pattern.nu b/docker/osm-nushell-krm-functions/operations/pattern.nu
new file mode 100644
index 0000000..d59842e
--- /dev/null
+++ b/docker/osm-nushell-krm-functions/operations/pattern.nu
@@ -0,0 +1,83 @@
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#######################################################################################
+
+# Module with custom functions to manage a Pattern definition, taking into account its corresponding source template and the set of transformations specified for its constituent Bricks.
+
+
+use ../krm *
+use ./replace.nu
+use ./location.nu
+use ./brick.nu
+
+# Generate a ResourceList based on a Pattern instance model received from stdin.
+#
+# Initially, the ResourceList will be generated from the templates at the `source` location (replacing environment variables as needed), and then the transformations indicated by the Bricks will be applied.
+export def create [
+    environment: record = {}    # Record with environment variables to load
+]: [
+    record -> record
+] {
+    let in_pattern: record = $in
+
+    # Get the pattern name and its parameters
+    let pattern_name: string = ($in_pattern | get "name")
+    let pattern_params: record = (
+        $in_pattern
+        | get -i "parameters"
+        | default {}
+        # If applicable, update placeholder values at the custom environment parameters
+        | replace vars (
+            $environment
+            | upsert $.PATTERN_NAME $pattern_name
+        )
+    )
+
+    # Update the environment to include the pattern name
+    let updated_environment: record = (
+        $environment
+        | upsert $.PATTERN_NAME $pattern_name
+        | merge $pattern_params
+    )
+
+    # Update the pattern record accordingly
+    let updated_pattern: record = (
+        $in_pattern
+        | replace vars $updated_environment
+    )
+
+    # Get other key parts
+    let src: string = (
+        $updated_pattern
+        | get "source"
+        | location to absolute path
+    )
+    let bricks: list<record> = ($updated_pattern | get "bricks")
+
+    # Generate ResourceList from source template folder
+    let rl: record = (
+        convert folder to resourcelist $src
+        | replace vars $updated_environment
+    )
+    
+    # Apply transformations according to the specified bricks
+    with-env $updated_environment {
+        $bricks
+        | reduce --fold $rl {|elt, acc|
+            $acc | brick transform $elt $updated_environment
+        }
+    }
+}
