diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties
index ba6a855d..347e06a3 100644
--- a/src/main/environment/common_ci.properties
+++ b/src/main/environment/common_ci.properties
@@ -36,3 +36,5 @@ source-address=@env.SMS_CONSENT_SOURCE_ADDRESS@
 sms-username=@env.SMS_USERNAME@
 sms-password=@env.SMS_PASSWORD@
 send-message-url=@env.SMS_MESSAGE_URL@
+
+crash.logs.base.path=@env.CRASH_LOGS_PATH@
diff --git a/src/main/environment/common_docker.properties b/src/main/environment/common_docker.properties
index cb3a613a..958a9a19 100644
--- a/src/main/environment/common_docker.properties
+++ b/src/main/environment/common_docker.properties
@@ -34,3 +34,5 @@ sms-username=${SMS_USERNAME}
 sms-password=${SMS_PASSWORD}
 
 send-message-url=${SMS_MESSAGE_URL}
+
+crash.logs.base.path=${CRASH_LOGS_PATH}
diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties
index ae5adaa7..51873ab6 100644
--- a/src/main/environment/common_example.properties
+++ b/src/main/environment/common_example.properties
@@ -36,6 +36,8 @@ sms-username=
 sms-password=
 send-message-url=
 
+crash.logs.base.path=<path used>
+
 
 
 
diff --git a/src/main/java/com/iemr/flw/controller/CrashLogController.java b/src/main/java/com/iemr/flw/controller/CrashLogController.java
new file mode 100644
index 00000000..335d7dbb
--- /dev/null
+++ b/src/main/java/com/iemr/flw/controller/CrashLogController.java
@@ -0,0 +1,63 @@
+package com.iemr.flw.controller;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.iemr.flw.dto.crashlogs.CrashLogRequest;
+import com.iemr.flw.service.CrashLogService;
+import com.iemr.flw.utils.JwtUtil;
+import com.iemr.flw.utils.response.OutputResponse;
+
+@RestController
+@RequestMapping(value = "/crash-logs", headers = "Authorization")
+public class CrashLogController {
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
+
+    @Autowired
+    private CrashLogService crashLogService;
+
+    @Autowired
+    private JwtUtil jwtUtil;
+
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    @PostMapping(value = "/upload", consumes = "multipart/form-data")
+    public String uploadCrashLog(
+            @RequestHeader(value = "JwtToken") String jwtToken, // Changed from Authorization
+            @RequestParam("file") MultipartFile file,
+            @RequestParam("metadata") String metadataJson) {
+
+        OutputResponse response = new OutputResponse();
+
+        try {
+            // No need to remove "Bearer " prefix - JwtToken header contains raw JWT
+            Integer userId = jwtUtil.extractUserId(jwtToken);
+
+            // Parse metadata JSON
+            CrashLogRequest request = objectMapper.readValue(metadataJson, CrashLogRequest.class);
+
+            // Save crash log file
+            String filePath = crashLogService.saveCrashLog(request, userId, file);
+
+            // Build success response
+            response.setResponse("Crash log saved successfully. File path: " + filePath);
+            logger.info("Crash log uploaded successfully for userId: " + userId);
+
+        } catch (Exception e) {
+            logger.error("Error uploading crash log: " + e.getMessage(), e);
+            response.setError(e);
+        }
+
+        return response.toString();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/iemr/flw/domain/iemr/M_User.java b/src/main/java/com/iemr/flw/domain/iemr/M_User.java
index 38687573..0187a613 100644
--- a/src/main/java/com/iemr/flw/domain/iemr/M_User.java
+++ b/src/main/java/com/iemr/flw/domain/iemr/M_User.java
@@ -3,6 +3,7 @@
 import java.sql.Timestamp;
 import java.time.LocalDate;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.gson.annotations.Expose;
 
 import jakarta.persistence.Column;
@@ -21,135 +22,136 @@
 import java.time.LocalDate;
 
 @Entity
-@Table(name = "m_User",schema = "db_iemr")
+@Table(name = "m_User", schema = "db_iemr")
 @Data
 public class M_User {
 
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Expose
-    @Column(name="UserID")
+    @Column(name = "UserID")
     private Integer userID;
     @Expose
-    @Column(name="TitleID")
+    @Column(name = "TitleID")
     private Integer titleID;
     @Expose
-    @Column(name="FirstName")
+    @Column(name = "FirstName")
     private String firstName;
     @Expose
-    @Column(name="MiddleName")
+    @Column(name = "MiddleName")
     private String middleName;
     @Expose
-    @Column(name="LastName")
+    @Column(name = "LastName")
     private String lastName;
     @Expose
-    @Column(name="GenderID")
+    @Column(name = "GenderID")
     private Short genderID;
 
     @Expose
-    @Column(name="MaritalStatusID")
+    @Column(name = "MaritalStatusID")
     private Integer maritalStatusID;
     @Expose
-    @Column(name="DesignationID")
+    @Column(name = "DesignationID")
     private Integer designationID;
 
     @Expose
-    @Column(name="AadhaarNo")
+    @Column(name = "AadhaarNo")
     private String aadhaarNo;
     @Expose
-    @Column(name="PAN")
+    @JsonProperty("pan")
+    @Column(name = "PAN")
     private String pAN;
     @Expose
-    @Column(name="DOB")
-    private LocalDate dOB;
+    @JsonProperty("dob")
+    @Column(name = "DOB")
+    private Timestamp dOB;
     @Expose
-    @Column(name="DOJ")
-    private LocalDate dOJ;
+    @JsonProperty("doj")
+    @Column(name = "DOJ")
+    private Timestamp dOJ;
     @Expose
-    @Column(name="QualificationID")
+    @Column(name = "QualificationID")
     private Integer qualificationID;
     @Expose
-    @Column(name="HealthProfessionalID")
+    @Column(name = "HealthProfessionalID")
     private String healthProfessionalID;
     @Expose
-    @Column(name="UserName")
+    @Column(name = "UserName")
     private String userName;
     @Expose
-    @Column(name="Password")
+    @Column(name = "Password")
     private String password;
     @Expose
-    @Column(name="IsExternal")
+    @Column(name = "IsExternal")
     private Boolean isExternal;
     @Expose
-    @Column(name="AgentID")
+    @Column(name = "AgentID")
     private String agentID;
     @Expose
-    @Column(name="AgentPassword")
+    @Column(name = "AgentPassword")
     private String agentPassword;
     @Expose
-    @Column(name="EmailID")
+    @Column(name = "EmailID")
     private String emailID;
     @Expose
-    @Column(name="StatusID")
+    @Column(name = "StatusID")
     private Integer statusID;
     @Expose
-    @Column(name="EmergencyContactPerson")
+    @Column(name = "EmergencyContactPerson")
     private String emergencyContactPerson;
     @Expose
-    @Column(name="EmergencyContactNo")
+    @Column(name = "EmergencyContactNo")
     private String emergencyContactNo;
     @Expose
-    @Column(name="IsSupervisor")
+    @Column(name = "IsSupervisor")
     private Boolean isSupervisor;
     @Expose
-    @Column(name="Deleted",insertable = false, updatable = true)
+    @Column(name = "Deleted", insertable = false, updatable = true)
     private Boolean deleted;
     @Expose
-    @Column(name="CreatedBy")
+    @Column(name = "CreatedBy")
     private String createdBy;
     @Expose
-    @Column(name="EmployeeID")
+    @Column(name = "EmployeeID")
     private String employeeID;
     @Expose
-    @Column(name="CreatedDate",insertable = false, updatable = false)
+    @Column(name = "CreatedDate", insertable = false, updatable = false)
     private Timestamp createdDate;
     @Expose
-    @Column(name="ModifiedBy")
+    @Column(name = "ModifiedBy")
     private String modifiedBy;
     @Expose
-    @Column(name="LastModDate",insertable = false, updatable = false)
+    @Column(name = "LastModDate", insertable = false, updatable = false)
     private Timestamp lastModDate;
 
     @Expose
-    @Column(name="Remarks")
+    @Column(name = "Remarks")
     private String remarks;
 
     @Expose
-    @Column(name="ContactNo")
+    @Column(name = "ContactNo")
     private String contactNo;
 
-
     @Expose
-    @Column(name="IsProviderAdmin")
+    @Column(name = "IsProviderAdmin")
     private Boolean isProviderAdmin;
 
     @Expose
-    @Column(name="ServiceProviderID")
+    @Column(name = "ServiceProviderID")
     private Integer serviceProviderID;
 
-
-
     @Expose
     @Column(name = "failed_attempt", insertable = false)
     private Integer failedAttempt;
+
     public M_User() {
         // TODO Auto-generated constructor stub
     }
 
     public M_User(Integer userID, String userName) {
         // TODO Auto-generated constructor stub
-        this.userID=userID;
-        this.userName=userName;
+        this.userID = userID;
+        this.userName = userName;
     }
 
 }
diff --git a/src/main/java/com/iemr/flw/dto/crashlogs/CrashLogRequest.java b/src/main/java/com/iemr/flw/dto/crashlogs/CrashLogRequest.java
new file mode 100644
index 00000000..2e0bf107
--- /dev/null
+++ b/src/main/java/com/iemr/flw/dto/crashlogs/CrashLogRequest.java
@@ -0,0 +1,10 @@
+package com.iemr.flw.dto.crashlogs;
+
+import lombok.Data;
+
+@Data
+public class CrashLogRequest {
+    private String appVersion;
+    private String deviceId;
+    private String timestamp;
+}
diff --git a/src/main/java/com/iemr/flw/service/CrashLogService.java b/src/main/java/com/iemr/flw/service/CrashLogService.java
new file mode 100644
index 00000000..f0ffe35e
--- /dev/null
+++ b/src/main/java/com/iemr/flw/service/CrashLogService.java
@@ -0,0 +1,9 @@
+package com.iemr.flw.service;
+
+import com.iemr.flw.dto.crashlogs.CrashLogRequest;
+import org.springframework.web.multipart.MultipartFile;
+import com.iemr.flw.utils.exception.IEMRException;
+
+public interface CrashLogService {
+    String saveCrashLog(CrashLogRequest request, Integer userId, MultipartFile file) throws IEMRException;
+}
\ No newline at end of file
diff --git a/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java b/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java
index 9f884ced..29ca30da 100644
--- a/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java
+++ b/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java
@@ -99,16 +99,15 @@ private AshaWorker getDetails(Integer userID) {
             M_User m_user = Objects.requireNonNull(employeeMasterInter.getUserDetails(userID), "User details not found for ID: " + userID);
             AshaWorker ashaWorker = new AshaWorker();
             ashaWorker.setEmployeeId(m_user.getUserID());
-            ashaWorker.setDob(m_user.getDOB());
-            LocalDate doj = m_user.getDOJ();
-
-            if (doj == null) {
-                doj = LocalDate.now();
-            }
-
+            // Convert DOB (Timestamp) to LocalDate
+            java.sql.Timestamp dobTimestamp = m_user.getDOB();
+            LocalDate dob = dobTimestamp != null ? dobTimestamp.toLocalDateTime().toLocalDate() : null;
+            ashaWorker.setDob(dob);
+            // Convert DOJ (Timestamp) to LocalDate
+            java.sql.Timestamp dojTimestamp = m_user.getDOJ();
+            LocalDate doj = dojTimestamp != null ? dojTimestamp.toLocalDateTime().toLocalDate() : LocalDate.now();
             ashaWorker.setDateOfJoining(doj);
             ashaWorker.setName(String.format("%s %s", Objects.toString(m_user.getFirstName(), ""), Objects.toString(m_user.getLastName(), "")).trim());
-
             ashaWorker.setMobileNumber(m_user.getContactNo());
             ashaWorker.setAlternateMobileNumber(m_user.getEmergencyContactNo());
             ashaWorker.setProviderServiceMapID(m_user.getServiceProviderID());
diff --git a/src/main/java/com/iemr/flw/service/impl/CrashLogServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CrashLogServiceImpl.java
new file mode 100644
index 00000000..da2fbaa0
--- /dev/null
+++ b/src/main/java/com/iemr/flw/service/impl/CrashLogServiceImpl.java
@@ -0,0 +1,128 @@
+package com.iemr.flw.service.impl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.iemr.flw.dto.crashlogs.CrashLogRequest;
+import com.iemr.flw.service.CrashLogService;
+import com.iemr.flw.utils.exception.IEMRException;
+import org.springframework.beans.factory.annotation.Value;
+
+@Service
+public class CrashLogServiceImpl implements CrashLogService {
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
+
+    @Value("${crash.logs.base.path}")
+    private String crashLogsBasePath;
+
+    @Override
+    public String saveCrashLog(CrashLogRequest request, Integer userId, MultipartFile file)
+            throws IEMRException {
+
+        try {
+            // 🛡️ Validate file
+            if (file.isEmpty()) {
+                throw new IEMRException("Uploaded file is empty");
+            }
+
+            String originalFilename = file.getOriginalFilename();
+            if (originalFilename == null) {
+                throw new IEMRException("Invalid filename");
+            }
+
+            // Prevent path traversal
+            String safeOriginalName = Paths.get(originalFilename).getFileName().toString();
+
+            // Only allow .txt
+            if (!safeOriginalName.toLowerCase().endsWith(".txt")) {
+                throw new IEMRException("Only .txt files are allowed");
+            }
+
+            // Validate MIME
+            String contentType = file.getContentType();
+            if (contentType == null ||
+                    (!contentType.equals("text/plain") &&
+                            !contentType.equals("application/octet-stream"))) {
+                throw new IEMRException("Invalid file type. Only plain text allowed.");
+            }
+
+            // Block binary content
+            if (isBinaryFile(file.getBytes())) {
+                throw new IEMRException("Binary files are not allowed. Upload valid text logs only.");
+            }
+
+            // 📁 Create date-based folder
+            LocalDate date = LocalDate.now();
+            String dateFolder = date.format(DateTimeFormatter.ISO_LOCAL_DATE);
+
+            File dateDir = new File(crashLogsBasePath, dateFolder);
+            if (!dateDir.exists() && !dateDir.mkdirs()) {
+                throw new IEMRException("Failed to create folder: " + dateDir.getAbsolutePath());
+            }
+
+            //  Use timestamp as sent by frontend (NO conversion)
+            String rawTimestamp = request.getTimestamp(); // Already "yyyy-MM-dd HH:mm:ss"
+
+            // Make timestamp filename-safe
+            String safeTimestamp = rawTimestamp
+                    .replace(" ", "_")
+                    .replace(":", "-");
+
+            // 📝 Final file name
+            String filename = String.format(
+                    "%d_%s_%s_%s.txt",
+                    userId,
+                    sanitizeFilename(request.getAppVersion()),
+                    sanitizeFilename(request.getDeviceId()),
+                    sanitizeFilename(safeTimestamp));
+
+            File crashLogFile = new File(dateDir, filename);
+
+            // 💾 Save file
+            try (FileOutputStream fos = new FileOutputStream(crashLogFile)) {
+                fos.write(file.getBytes());
+            }
+
+            String relativePath = dateFolder + "/" + filename;
+            logger.info("Crash log saved: " + relativePath);
+
+            return relativePath;
+
+        } catch (IOException e) {
+            logger.error("Error saving crash log", e);
+            throw new IEMRException("Error saving crash log: " + e.getMessage(), e);
+        }
+    }
+
+    // Detect binary content
+    private boolean isBinaryFile(byte[] data) {
+        int len = Math.min(data.length, 2048);
+        for (int i = 0; i < len; i++) {
+            byte b = data[i];
+            if (b < 0x09)
+                return true;
+            if (b > 0x0D && b < 0x20)
+                return true;
+        }
+        return false;
+    }
+
+    // Sanitize metadata for filename safety
+    private String sanitizeFilename(String input) {
+        if (input == null)
+            return "unknown";
+        return input.replaceAll("[^a-zA-Z0-9.-]", "_");
+    }
+}
diff --git a/src/main/java/com/iemr/flw/utils/JwtUserIdValidationFilter.java b/src/main/java/com/iemr/flw/utils/JwtUserIdValidationFilter.java
index 73fcc3df..fcefd712 100644
--- a/src/main/java/com/iemr/flw/utils/JwtUserIdValidationFilter.java
+++ b/src/main/java/com/iemr/flw/utils/JwtUserIdValidationFilter.java
@@ -76,7 +76,7 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo
 		}
 
 		// Skip login and public endpoints
-		if (true) {
+		if (shouldSkipPath(path, contextPath)) {
 			filterChain.doFilter(servletRequest, servletResponse);
 			return;
 		}
