emr-types
Version:
Comprehensive TypeScript Types Library for Electronic Medical Record (EMR) Applications - Domain-Driven Design with Zod Validation
74 lines • 2.41 kB
JavaScript
/**
* Address Factory Functions
*/
export const AddressFactory = {
/**
* Create an address from parts
*/
create: (street, city, province, postalCode, country = 'Vietnam') => {
// Basic validation
if (!street || !city || !province || !postalCode) {
throw new Error('All address fields are required');
}
const value = `${street}, ${city}, ${province} ${postalCode}, ${country}`;
const formatted = formatAddress(street, city, province, postalCode, country);
return {
value,
isValid: true,
street,
city,
province,
postalCode,
country,
formatted,
validatedAt: new Date()
};
},
/**
* Create an address from string
*/
fromString: (addressString) => {
// Simple parsing - in real implementation, you might use a more sophisticated parser
const parts = addressString.split(',').map(part => part.trim());
if (parts.length < 4) {
throw new Error('Invalid address format');
}
const [street, city, provincePostal, country] = parts;
const provincePostalParts = provincePostal?.split(' ') || [];
const province = provincePostalParts[0] || '';
const postalCode = provincePostalParts[1] || '';
return AddressFactory.create(street || '', city || '', province, postalCode, country || 'Vietnam');
}
};
/**
* Address Validation Functions
*/
export const AddressValidator = {
/**
* Check if address has all required fields
*/
hasRequiredFields: (address) => {
return !!(address.street && address.city && address.province && address.postalCode);
},
/**
* Check if postal code is valid Vietnamese format
*/
isValidVietnamesePostalCode: (postalCode) => {
// Vietnamese postal codes are 6 digits
const postalCodeRegex = /^\d{6}$/;
return postalCodeRegex.test(postalCode);
},
/**
* Check if address is in Vietnam
*/
isVietnameseAddress: (address) => {
return address.country.toLowerCase() === 'vietnam';
}
};
/**
* Format address for display
*/
function formatAddress(street, city, province, postalCode, country) {
return `${street}\n${city}, ${province} ${postalCode}\n${country}`;
}
//# sourceMappingURL=Address.js.map