diff --git a/documentation/openapi-authoring-automated-guidelines.md b/documentation/openapi-authoring-automated-guidelines.md
index cc7401937ca8..0a357da13333 100644
--- a/documentation/openapi-authoring-automated-guidelines.md
+++ b/documentation/openapi-authoring-automated-guidelines.md
@@ -60,6 +60,7 @@ We request OpenAPI(Swagger) spec authoring be assigned to engineers who have an
| [R2057](#r2057) | [InvalidSkuModel](#r2057) | ARM OpenAPI(swagger) specs |
| [R3010](#r3010) | [TrackedResourceListByImmediateParent](#r3010) | ARM OpenAPI(swagger) specs |
| [R2004](#r2004) | [NonApplicationJsonType](#r2004) | ARM OpenAPI(swagger) specs |
+| [R4004](#r4004) | [OperationIdRequired](#r4004) | ARM OpenAPI(swagger) specs |
| [R3020](#r3020) | [PathResourceProviderNamePascalCase](#r3020) | ARM OpenAPI(swagger) specs |
| [R3021](#r3021) | [PathResouceTypeNameCamelCase](#r3021) | ARM OpenAPI(swagger) specs |
| [R3015](#r3015) | [EnumMustHaveType](#r3015) | ARM OpenAPI(swagger) specs |
@@ -1408,10 +1409,14 @@ Links: [Index](#index) | [Error vs. Warning](#error-vs-warning) | [Automated Rul
**Applies to** : ARM OpenAPI(swagger) specs
-**Output Message**: Top level properties should be one of name, type, id, location, properties, tags, plan, sku, etag, managedBy, identity. Model definition '{0}' has extra properties ['{1}'].
+**Output Message**: Top level properties should be one of name, type, id, location, properties, tags, plan, sku, etag, managedBy, identity, systemdata. Model definition '{0}' has extra properties ['{1}'].
**Description**: Per [ARM guidelines](https://github.com/Azure/azure-resource-manager-rpc/blob/master/v1.0/resource-api-reference.md), top level properties of a resource should be only ones from the allowed set.
+**CreatedAt** : N/A
+
+**LastModifiedAt** : February 18, 2020
+
**Why the rule is important**: [ARM guidelines](https://github.com/Azure/azure-resource-manager-rpc/blob/master/v1.0/resource-api-reference.md).
**How to fix the violation**: Consider moving extra properties into "properties" bag of the resource model.
@@ -1662,11 +1667,56 @@ Links: [Index](#index) | [Error vs. Warning](#error-vs-warning) | [Automated Rul
**Output Message**: Properties of a PATCH request body must not be {0}. PATCH operation: '{1}' Model Definition: '{2}' Property: '{3}'
**Description**: A request parameter of the Patch Operation must not have a required/default value.
+But it's allowed when all required properties are marked as discriminator, because the discriminator must be required.
+
+**CreatedAt** : N/A
+
+**LastModifiedAt** : February 18, 2020
**Why the rule is important**: A PATCH operation is used to update properties of a resource. So, If the resource has 'X' number of properties and if you wish to change one of them, then a PATCH request could be sent with a value for that specified property. In other words, all the properties in the PATCH request are updated. Now, if any of the values are marked as required/default, it would force the system to update it always which is not the intention of the PATCH operation.
**How to fix the violation**: Ensure that the request parameter of the Patch Operation does not have a required/default value.
+**Good Examples**: The following is a good example:
+```json
+......
+......
+ "patch": {
+ "tags": [
+ "SampleTag"
+ ],
+ "operationId": "Foo_Update",
+ "description": "Test Description",
+ "parameters": [
+ {
+ "name": "foo_patch",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/FooRequestParams"
+ },
+ "description": "foo patch request"
+ }
+ ]
+ }
+......
+......
+ "definitions": {
+ "FooRequestParams": {
+ "properties": {
+ "prop0": {
+ "type": "string"
+ }
+ },
+ "discriminator": "prop0",
+ "required": [
+ "prop0"
+ ]
+ }
+ }
+......
+......
+```
+
Links: [Index](#index) | [Error vs. Warning](#error-vs-warning) | [Automated Rules](#automated-rules) | [ARM](#arm-violations): [Errors](#arm-errors) or [Warnings](#arm-warnings) | [SDK](#sdk-violations): [Errors](#sdk-errors) or [Warnings](#sdk-warnings)
### R4000 ParameterDescriptionRequired
@@ -1846,6 +1896,24 @@ or
Links: [Index](#index) | [Error vs. Warning](#error-vs-warning) | [Automated Rules](#automated-rules) | [ARM](#arm-violations): [Errors](#arm-errors) or [Warnings](#arm-warnings) | [SDK](#sdk-violations): [Errors](#sdk-errors) or [Warnings](#sdk-warnings)
+### R4004 OperationIdRequired
+
+**Category** : ARM Warning
+
+**Applies to** : ARM OpenAPI(swagger) specs
+
+**Output Message** : Missing operationId. path:'${operation path}' operation:'${operation}'.
+
+**Description** : Each operation must has a unique operationId.
+
+**CreatedAt** : February 18, 2020
+
+**LastModifiedAt** : February 18, 2020
+
+**Why this rule is important**: Per [creating-swagger](creating-swagger.md#Paths),The operationId is used to determine the generated method name.
+
+**How to fix the violation**: Add the right operationId for each operation
+
### R3020 PathResourceProviderNamePascalCase
**Category** : ARM Warning