Regole di pianificazione e complessità nella codifica Molte regole rispettano il tempo?

1

Abbiamo alcuni campi (età, tipo di visita, tipo di assicurazione, città) e alcune regole:

  1. Alcuni medici che definiscono il modello di pianificazione settimanale come:

Il dottore D1 lavora da lunedì alle 19:00, giovedì dalle 19:00 alle 19:00.

  1. Un tipo di tipo di visita come:

Il dottore D1 accetta Follow-up-Laser-Rhinoplasty.

  1. Alcuni tipi di contatori governano in un intervallo di tempo specifico per il medico:

Il dottore D1 accetta solo 50 pazienti con assicurazione di tipo A dal 18 al 30 aprile.

  1. Un tipo di regola specifica:

D1 Accetta paziente per tipo laser il lunedì

o per esempio:

D1 Accetta il paziente solo di 15 anni di età da New York

La mia domanda è qual è il modo migliore per gestire questa combinazione di regole per la pianificazione del fornitore (medico)? (Dovrei combinare 4 con 2 nel modulo Defining Visit Type, o forse firs dovrebbe definire il modello orario di lavoro (1) in un modulo e poi mixare (2, 3, 4) e quindi aggiungere al modello orario lavorativo?

Come posso gestire questa complessa situazione per la prenotazione di un appuntamento online basato su regole? Intendo dire paziente con 16 anni di intervallo di tempo non visto che ha una regola per paziente di 15 anni.

Il mio obiettivo è molto semplice. qualsiasi paziente che soddisfi le regole (definito nelle fasce orarie dal fornitore) può vedere l'intervallo di tempo corrispondente, non tutte le fasce orarie. per raggiungere a questo scopo come posso gestire queste regole (quali ordini)?

    
posta user355834 17.04.2018 - 13:00
fonte

1 risposta

0

I motori delle regole aziendali ti consentono di specificare le tue condizioni in modo (più o meno) ad-hoc.

Di seguito è un esempio. Nota che questo è il codice, quindi se le tue regole devono essere fluide, è necessario un motore di esecuzione di script per eseguirle.

public class PreferredCustomerDiscountRule : Rule
{
    public override void Define()
    {
        Customer customer = null;
        IEnumerable<Order> orders = null;

        When()
            .Match<Customer>(() => customer, c => c.IsPreferred)
            .Query(() => orders, x => x
                .Match<Order>(
                    o => o.Customer == customer,
                    o => o.IsOpen,
                    o => !o.IsDiscounted)
                .Collect()
                .Where(c => c.Any()));

        Then()
            .Do(ctx => ApplyDiscount(orders, 10.0))
            .Do(ctx => ctx.UpdateAll(orders));
    }

    private static void ApplyDiscount(IEnumerable<Order> orders, double discount)
    {
        foreach (var order in orders)
        {
            order.ApplyDiscount(discount);
        }
    }
}

Se non hai voglia di scrivere codice per le tue regole, o hai bisogno della flessibilità di archiviarle come dati, non come codice, puoi usare un motore che serializza le regole in JSON o XML, come MicroRule Engine .

    
risposta data 17.04.2018 - 17:26
fonte