Hola, quiero compartir el resultado de mis reto, me costó muchísimo :,v
creación de NotifierFactory:
class NotifierFactory():
"""_summary_
Args:
NotifierProtocol: Interfaz que define el comportamiento de las notificaciones.
customer_data (CustomerData): Información del cliente.
ContactInfo: Trae la información de contacto del cliente.
returns:
Una instancia de la clase que se va a usar para notificar al cliente.
"""
@staticmethod
def create_notifier(customer_data:CustomerData) -> NotifierProtocol:
match customer_data.contact_info:
case ContactInfo.email:
return EmailNotifier()
case ContactInfo.phone:
return SMSNotifier(gateway="Tigo_Une: 1234567890")
case _:
raise ValueError("no se soporta este tipo de notificación")
```Instanciación de NotifierFactory en **Builder.py**:  
```js
def set_notifier(self, customer_data: CustomerData) -> Self:
"""_summary_
Args:
customer_data: info de cliente
Do:
En Factory, se creó la lógica para elegir el notificador.
Returns:
Una clase (sms, email)
"""
self.notifier = NotifierFactory.create_notifier(customer_data)
return self
```  
*<u>MÉTODOS DE PAYMENT\_PROCESSOR</u>*  
Creación de **RefundPaymentFactory**:  
```python
@dataclass
class RefundPaymentFactory():
payment_data: PaymentData
@staticmethod
def refundPayment(self, transaction_id:str):
match self.payment_data.type:
case PaymentType.ONLINE:
match self.payment_data.currency:
case "USD":
return StripePaymentProcessor.refund_payment(transaction_id)
case _: #cualquier otra cosa
return LocalPaymentProcessor.refund_payment(transaction_id)
...
case PaymentType.OFFLINE:
return OfflinePaymentProcessor() #no hace falta instanciar el método.
case _: # cualquier otra cosa
raise ValueError("no se soporta este tipo de reembolsos")
```Instanciación de RefundPaymentFactory en **Builder.py:**  
```js
def set_refund_processor(self, transaction_id) -> Self:
self.refund_processor = RefundPaymentFactory.refundPayment(transaction_id)
return self
```Creación de **RecurringPaymentFactory:**  
```python
class RecurringPaymentFactory():
@staticmethod
def setup_recurring(customer_data: CustomerData,payment_data:PaymentData):
match payment_data.type:
case PaymentType.ONLINE:
match payment_data.currency:
case "USD":
return StripePaymentProcessor.setup_recurring_payment(customer_data, payment_data)
case _: #cualquier otra cosa
return LocalPaymentProcessor.setup_recurring_payment(customer_data, payment_data)
...
case PaymentType.OFFLINE:
return OfflinePaymentProcessor() #no hace falta instanciar el método.
case _: # cualquier otra cosa
raise ValueError("no se soporta este tipo de pagos recurrentes")
```Instanciación de RecurringPaymentFactory en **builder.py**  
```python
def set_recurring_payment(self, customer_data: CustomerData, payment_data: PaymentData) -> Self:
self.recurring_processor = RecurringPaymentFactory.setup_recurring(customer_data=customer_data, payment_data=payment_data)
return self
```Déjenme saber si me equivoqué jeheh  
@camilocsoto